AWT Methode paint()

javatic

Mitglied
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:

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. :p

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.
 

Eldorado

Bekanntes Mitglied
In der Paint Methode sollte wirklich nur gezeichnet werden, da diese mitunter sehr oft aufgerufen wird. Das kannst du nicht beeinflussen. Zufalls-Farben also einmal erzeugen und in der Klasse speichern, damit diese beim Paint immer die selben sind und versuchen, dass die Paint-Methode nur so wenig macht wie wirklich nötig.
 

javatic

Mitglied
Macht es Sinn die Farben generell außerhalb der Klasse zu generieren und dann quasi die Key-Klasse um die Eigenschaft color zu erweitern? Oder sollte ich einfach im Konstruktor der PieChart Klasse die Farben generieren und extra speichern?

Grüße!
 

javatic

Mitglied
Ok, habe es jetzt direkt in der Klasse gemacht, dass dort die Farben generiert werden. Was mir gerade noch beim Start aufgefallen ist, dass wirklich kurz mal das Fenster so ein Flackern hat, wenn paint wieder aufgerufen wird. Ist das normal?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
krgewb 2D-Grafik paint-Methode wird zu oft ausgeführt AWT, Swing, JavaFX & SWT 5
S Zeichen ohne paint-Methode AWT, Swing, JavaFX & SWT 2
J Swing Wann brauche ich @Override vor der paint()-Methode? AWT, Swing, JavaFX & SWT 1
G Eine paint-Methode, 2 Welten? AWT, Swing, JavaFX & SWT 3
A paint-Methode aufrufen AWT, Swing, JavaFX & SWT 13
S Grafik: Programm kommt nicht zur paint()-Methode AWT, Swing, JavaFX & SWT 6
W Paint-Methode in anderer Klasse funktioniert nicht AWT, Swing, JavaFX & SWT 7
F 2D-Grafik Was ruft die Paint - Methode auf ? AWT, Swing, JavaFX & SWT 2
S JButton u. Label auf paint-Methode AWT, Swing, JavaFX & SWT 1
S Paint Methode ohne implements JPanel AWT, Swing, JavaFX & SWT 1
S Farbe ändern bei der paint-Methode AWT, Swing, JavaFX & SWT 5
J ActionListener soll auf paint() Methode zugreifen AWT, Swing, JavaFX & SWT 1
J Problem mit der paint Methode AWT, Swing, JavaFX & SWT 0
Junb 2D-Grafik paint() Methode bugt? AWT, Swing, JavaFX & SWT 2
I Paint-Methode von nicht statischen Objekten aufrufen AWT, Swing, JavaFX & SWT 3
D JSlider "laggt" nach überschreiben der paint methode AWT, Swing, JavaFX & SWT 2
A Paint Methode externer auruf AWT, Swing, JavaFX & SWT 5
X Bild via FileChooser in paint-Methode laden AWT, Swing, JavaFX & SWT 2
G paint-Methode kopiert GUI AWT, Swing, JavaFX & SWT 14
F AWT Probleme mit der paint() methode AWT, Swing, JavaFX & SWT 2
C Unterschiedlicher Aufruf der paint() Methode ? (AWT/Swing) AWT, Swing, JavaFX & SWT 2
L Problem mit paint Methode und Bild AWT, Swing, JavaFX & SWT 7
F paint-Methode des JComboboxEditorComponent AWT, Swing, JavaFX & SWT 2
hdi Swing JLabel & paint-Methode gemixt - wie schlimm wirklich? AWT, Swing, JavaFX & SWT 5
N Paint methode anhalten und neustarten AWT, Swing, JavaFX & SWT 5
R [gelöst]Fenster schließen - trotz Endlosschleife in der Paint-Methode? AWT, Swing, JavaFX & SWT 3
M Allgemeines zur paint Methode AWT, Swing, JavaFX & SWT 5
A paint()-Methode für Videoexport nutzen AWT, Swing, JavaFX & SWT 2
D Paint() Methode aus einer anderen Klasse aufrufen AWT, Swing, JavaFX & SWT 6
L Dynamisches Ändern der Größe in JPanel mit paint()-Methode AWT, Swing, JavaFX & SWT 8
C paint-Methode überschreiben AWT, Swing, JavaFX & SWT 19
hdi meine paint-methode macht faxen? AWT, Swing, JavaFX & SWT 21
G paint() Methode aus anderer klasse aufrufen? AWT, Swing, JavaFX & SWT 6
G Frage zur paint-Methode (AWT) AWT, Swing, JavaFX & SWT 9
N paint Methode im JFrame AWT, Swing, JavaFX & SWT 3
T Paint-Methode geht nicht AWT, Swing, JavaFX & SWT 5
F Paint-Methode Überschreiben macht Refresh-Fehler ? AWT, Swing, JavaFX & SWT 8
B paint methode wiederholen AWT, Swing, JavaFX & SWT 6
G Problem mit paint Methode und Buttons AWT, Swing, JavaFX & SWT 10
T JPanel - paint Methode?, aber wie AWT, Swing, JavaFX & SWT 13
K paint-Methode überschrieben - trotzdem JComponenten zeichnen AWT, Swing, JavaFX & SWT 5
bummerland paint Methode AWT, Swing, JavaFX & SWT 2
MiMa Optimieren einer Methode zum Zentrieren von Fenstern AWT, Swing, JavaFX & SWT 0
P Methode wird nicht überprüft AWT, Swing, JavaFX & SWT 4
P paintComponent-Methode wird dauernd neu aufgerufen AWT, Swing, JavaFX & SWT 2
M passende Reflexion-Methode?? AWT, Swing, JavaFX & SWT 1
M Seltsame Exception bei setVisible(true) Methode in einem JFrame AWT, Swing, JavaFX & SWT 2
M Swing Methode datenLesen() greift auf catchBlock zu? AWT, Swing, JavaFX & SWT 25
K JavaFX unterschiedliche (mehrere Fenster) in seperater Main Methode AWT, Swing, JavaFX & SWT 26
U was bewirkt die methode fill und unterschied zu anderen fill Methoden in 2dgraphics? (Java)? AWT, Swing, JavaFX & SWT 6
H Transparent zeichnen mit drawImage in paintComponent Methode AWT, Swing, JavaFX & SWT 3
Z Methode bei Boolean change neu Ausführen AWT, Swing, JavaFX & SWT 9
T TableView über Methode befüllen AWT, Swing, JavaFX & SWT 10
H Event Handling Thread - Abruf der get-Methode AWT, Swing, JavaFX & SWT 5
L JFrame Gui in anderer Methode aufrufen AWT, Swing, JavaFX & SWT 0
J Rekursive Methode JProgressBar AWT, Swing, JavaFX & SWT 4
A Methode pausieren bis anderes Ereignis ausgeführt AWT, Swing, JavaFX & SWT 2
K Swing Text eines Lables in einer Methode ändern AWT, Swing, JavaFX & SWT 13
1 Swing Progressbar benutzen um Fortschritt einer Methode anzuzeigen AWT, Swing, JavaFX & SWT 4
J Compiler in der JavaFX stop() Methode warten lassen bist eine Aktion in einer anderen Scene gemacht AWT, Swing, JavaFX & SWT 5
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
J 2D-Grafik Brauche Erklärung von Methode AWT, Swing, JavaFX & SWT 1
L Methode zum Füllen einer ComboBox AWT, Swing, JavaFX & SWT 4
I Methode Draw3DRect und DrawRect AWT, Swing, JavaFX & SWT 2
K Methode repaint() AWT, Swing, JavaFX & SWT 1
A Methode in bestimmten Intervall ausführen AWT, Swing, JavaFX & SWT 2
Z jLabel von Methode aus aktualisieren AWT, Swing, JavaFX & SWT 7
Q AWT Methodenaufruf aus actionPerformed-Methode AWT, Swing, JavaFX & SWT 4
B Swing Update Swing Komponente bevor Methode startet. AWT, Swing, JavaFX & SWT 4
T Swing Methode in Listener aufrufen AWT, Swing, JavaFX & SWT 3
P keyTyped-Methode AWT, Swing, JavaFX & SWT 1
D JavaFX Java Methoden mit JavaFX Methode kommunizieren lassen? AWT, Swing, JavaFX & SWT 3
M JavaFX Methode nach initialize() aufrufen AWT, Swing, JavaFX & SWT 6
F JavaFX Mit einer Methode auf Stage zugreifen. AWT, Swing, JavaFX & SWT 8
C JavaFX Auf Nodes einer FXML-Datei in start Methode zugreifen AWT, Swing, JavaFX & SWT 5
R GUI Element in einer Methode aktualisieren (JTextPane) AWT, Swing, JavaFX & SWT 13
J Swing Problem mit Graphics Methode AWT, Swing, JavaFX & SWT 4
K Swing Durch Methode erzeugte Buttons ansteuern AWT, Swing, JavaFX & SWT 5
T LayoutManager Methode, um Bildschirm(fenster) für Aktualisierungen zu blockieren bzw. freizugeben gesucht AWT, Swing, JavaFX & SWT 2
S PaintIn - Methode AWT, Swing, JavaFX & SWT 1
J Swing ungewünschter Nebeneffekt bei der repaint() Methode AWT, Swing, JavaFX & SWT 3
A befüllen eines JTables mittels Methode AWT, Swing, JavaFX & SWT 10
K Kann nicht auf GUI Elemente zugreifen, mit einer Methode im Controller klappts, mit der anderen nich AWT, Swing, JavaFX & SWT 10
D JavaFX Interface Initializable - Was machen die Parameter in der Methode inizializeable() ? AWT, Swing, JavaFX & SWT 4
S JLabel-Text in Methode setzen? AWT, Swing, JavaFX & SWT 2
F JavaFX Zugriff auf Controller Methode von einer normalen Klasse aus AWT, Swing, JavaFX & SWT 4
J JLabel während einer methode aktualisieren AWT, Swing, JavaFX & SWT 6
T Swing Label aus anderer Methode bearbeiten AWT, Swing, JavaFX & SWT 2
C Methode über Buttonklick starten AWT, Swing, JavaFX & SWT 8
S Swing Mit einem Link eine Methode aufrufen AWT, Swing, JavaFX & SWT 2
P Swing Auf Methode zugreifen (am Schlauch steh) AWT, Swing, JavaFX & SWT 5
D Swing DefaultTableModel setValueAt Methode AWT, Swing, JavaFX & SWT 7
J valueChanged()-Methode liefert unbrauchbare Daten AWT, Swing, JavaFX & SWT 4
T Swing JPanel - "Open" Methode? AWT, Swing, JavaFX & SWT 6
P Swing actionPerformed()-Methode funktioniert nicht AWT, Swing, JavaFX & SWT 3
M Applet Bricht Methode zwischendruch ab AWT, Swing, JavaFX & SWT 11
K Per Textfield Methode ausführen AWT, Swing, JavaFX & SWT 6
J Swing JTable - nach Sortieren andere Methode aufrufen AWT, Swing, JavaFX & SWT 2
C Swing Was macht die Methode "setDataProviderCreditShown(boolean b)" AWT, Swing, JavaFX & SWT 4
R Swing Mit Swing eine throws Exception Methode öffnen AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben