Ik heb een programma geschreven dat een array sorteerd van klein naar groot. Dit werkt prima.
Ik wilde dit grafisch afbeelden en heb dus een class geschreven die netjes de array die ik aanlever via mijn sorteer class weergeeft als een grafiek.
Nu het mooie: ik wil elke seconde zien hoe de array wordt gesorteerd.
Elke loop van het sorteer algoritme levert een array op die weer een stukje verder gesorteerd is
.
Deze array stuur ik elke itteratie van de loop naar de GUI.
stukje code:
De methode setData roep ik aan vanaf mijn sortclass en daarin doe ik een repaint(), echter de repaint wordt pas uitgevoerd als de loop geweest is.
Ok, dit staat in de API, echter, ik wil dat hij gelijk getekend wordt.
Ik heb al eindeloos het web rond gespeurt en verschillende dingen geprobeerd zoals
Het enige wat ik steeds krijg is een x aantal seconden niets en dan wordt het eindresultaat van mijn sorteer algoritme gegeven.
Wie ow wie kan mij vertellen hoe ik die grafiek meteen kan tekenen ipv op het laatst?
Ik wilde dit grafisch afbeelden en heb dus een class geschreven die netjes de array die ik aanlever via mijn sorteer class weergeeft als een grafiek.
Nu het mooie: ik wil elke seconde zien hoe de array wordt gesorteerd.
Elke loop van het sorteer algoritme levert een array op die weer een stukje verder gesorteerd is
Deze array stuur ik elke itteratie van de loop naar de GUI.
stukje code:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
| import java.awt.*; import javax.swing.JPanel; public class BarChart extends JPanel { /**Sample data, and data names*/ private int[] dataValue = new int[1]; private Color[] colors = {Color.red, Color.yellow, Color.green, Color.blue, Color.cyan, Color.magenta, Color.orange, Color.pink, Color.darkGray}; public void paintComponent(Graphics g) { super.paintComponent(g); if (dataValue == null) return; // Find the maximum value in the data double max = dataValue[0]; for (int i=1; i<dataValue.length; i++) { max = Math.max(max, dataValue[i]); } int barWidth = (int)((getWidth() - 15.0)/dataValue.length - 9); if (barWidth <1){ barWidth = 1; } // The height of the bar. int maxBarHeight = getHeight() - 30; g.drawLine(5, getHeight()-10, getWidth()-5, getHeight()-10); int x = 15; for (int i=0; i<dataValue.length; i++) { g.setColor(colors[i%colors.length]); int newHeight = (int)(maxBarHeight*dataValue[i]/max); int y = getHeight()-10-newHeight; g.fillRect(x, y, barWidth, newHeight); g.setColor(Color.black); } x += barWidth + 9; } } /**Set data*/ public void setData(int[] dataValue) { this.dataValue = dataValue; repaint(); try { Thread.sleep(20); } catch (InterruptedException ex) { ex.printStackTrace(); } } } |
De methode setData roep ik aan vanaf mijn sortclass en daarin doe ik een repaint(), echter de repaint wordt pas uitgevoerd als de loop geweest is.
Ok, dit staat in de API, echter, ik wil dat hij gelijk getekend wordt.
Ik heb al eindeloos het web rond gespeurt en verschillende dingen geprobeerd zoals
Java:
1
2
3
4
| paint(GetGraphics()); paintComponent(GetGraphics()) update(GetGraphics()); revalidate(); |
Het enige wat ik steeds krijg is een x aantal seconden niets en dan wordt het eindresultaat van mijn sorteer algoritme gegeven.
Wie ow wie kan mij vertellen hoe ik die grafiek meteen kan tekenen ipv op het laatst?
Hi, I'm a signature virus. Put me in your signature to help me spread.