Hallo
Mein erster Post hier im schönen Java-Forum!
Ich bin seit wenigen Tagen dabei, mich mit Gui-Erstellung in Java zu beschäftigen und probiere dazu gerade ein Kuchendiagramm zu zeichnen. Folgenden Aufbau habe ich dazu bisher:
Klasse Key: hat zwei Attribut: double value und String description
--> Ein Key Objekt stellt quasi einen Wert des Diagramms mit seiner Bezeichnung dar.
Klasse TestPieChart: Beinhaltet eigentlich nur die main für den Programmstart. Darin werden mehrere Keys erstellt und in einer ArrayList gespeichert, die dann dem Konstruktor der Klasse PieChart übergeben wird. Mit der Liste soll dann das Diagramm gezeichnet werden.
Jetzt zum eigentlich Problem: die Klasse PieChart.
Ich poste den Code hier einfach mal, ist ja nicht sonderlich viel:
Also wie ich gelesen habe wird paint aufgerufen, sobald ich in meiner main setvisible(true) aufrufe. Bei mir ist es aber so, dass wenn ich das Programm starte, paint() 4 mal von alleine aufgerufen wird. Zweimal direkt zu Beginn und dann irgendwie wenige Sekunden danach nochmal. Durch meinen Zufallsgenerator wird dann natürlich das Diagramm in neuen Farben dargestellt und während der Laufzeit sollen sich die ja nicht unbedingt ändern.
Wann wird die paint() immer aufgerufen und wie kriege ich dieses Problem gelöst?
Ich danke euch jetzt schon einmal für die hoffentlich schnelle Hilfe.
Mein erster Post hier im schönen Java-Forum!
Ich bin seit wenigen Tagen dabei, mich mit Gui-Erstellung in Java zu beschäftigen und probiere dazu gerade ein Kuchendiagramm zu zeichnen. Folgenden Aufbau habe ich dazu bisher:
Klasse Key: hat zwei Attribut: double value und String description
--> Ein Key Objekt stellt quasi einen Wert des Diagramms mit seiner Bezeichnung dar.
Klasse TestPieChart: Beinhaltet eigentlich nur die main für den Programmstart. Darin werden mehrere Keys erstellt und in einer ArrayList gespeichert, die dann dem Konstruktor der Klasse PieChart übergeben wird. Mit der Liste soll dann das Diagramm gezeichnet werden.
Jetzt zum eigentlich Problem: die Klasse PieChart.
Ich poste den Code hier einfach mal, ist ja nicht sonderlich viel:
Java:
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.util.ArrayList;
public class PieChart extends Frame{
private ArrayList<Key> keys;
private String name;
public PieChart(ArrayList<Key> keys, String name) {
super(name);
this.keys = keys;
this.name = name;
}
@Override
public void paint(Graphics g) {
System.out.println("paint aufruf");
g.setColor(Color.gray);
g.setFont(new Font("Arial", Font.BOLD, 16));
g.drawString(name, 50, 80);
int length = keys.size();
double total = 0;
//add all numbers
for(int i = 0; i < length; i++)
total += keys.get(i).getValue();
//multiplication factor
double factor = 360 / total;
//calculate degrees
int[] degrees = new int[length];
for(int i = 0; i < length; i++)
degrees[i] = (int) ( factor * keys.get(i).getValue() );
Color[] theColors = new Color[length];
//paint it
int start = 0;
for(int i = 0; i < length; i++) {
int ro = (int) (Math.random() * 255);
int gr = (int) (Math.random() * 255);
int bl = (int) (Math.random() * 255);
Color c = new Color(ro,gr,bl);
theColors[i] = c;
g.setColor(c);
g.fillArc(100, 100, 200, 200, start, degrees[i]);
start += degrees[i];
}
}
}
Also wie ich gelesen habe wird paint aufgerufen, sobald ich in meiner main setvisible(true) aufrufe. Bei mir ist es aber so, dass wenn ich das Programm starte, paint() 4 mal von alleine aufgerufen wird. Zweimal direkt zu Beginn und dann irgendwie wenige Sekunden danach nochmal. Durch meinen Zufallsgenerator wird dann natürlich das Diagramm in neuen Farben dargestellt und während der Laufzeit sollen sich die ja nicht unbedingt ändern.
Wann wird die paint() immer aufgerufen und wie kriege ich dieses Problem gelöst?
Ich danke euch jetzt schon einmal für die hoffentlich schnelle Hilfe.