# paint() wird zweimal ausgeführt



## timriddance (29. Sep 2009)

Hallo zusammen

Vielleicht ist das eine dumme Frage, aber ich bin ein ziemlicher Anfänger.

Ich habe das Programm:


```
package chapter5;
import javax.swing.JApplet;
import java.awt.Graphics;

/**
 * @author xxx
 * Applet that is used for drawing faces
 */
public class PO16 extends JApplet {

	/**
	 * 
	 * @param canvas
	 */
	public void paint(Graphics canvas) {
		PO16_Face testface = new PO16_Face();
		testface.generate(canvas, 5, 10, 1);
		System.out.println("blabla");
	}

}
```

PO16_Face ist eine Klasse, die ein Gesicht repräsentiert, mit PO16_Face.generate() werden ein paar einfache Zeichnungen mit der Graphics-Klasse ausgeführt.

Als ich nun etwas, in diesem Fall "blabla" an die Konsole ausgeben wollte, merkte ich, dass dies zweimal ausgegeben wird. Ist dies normal und was ist der Grund dafür?

Danke schon einmal


----------



## SlaterB (29. Sep 2009)

paint wird unbestimm oft aufgerufen, je nachdem ob der Browser das für richtig hält,
ob andere Fenster das überblenden usw.,
das Programm darf nicht von der Anzahl der paints abhängig sein


----------



## André Uhres (30. Sep 2009)

In einem systemausgelösten Malvorgang, bittet das System eine Komponente, ihren Inhalt darzustellen, normalerweise aus einem der folgenden Gründe: 

Die Komponente wird zum erstenmal sichtbar auf dem Bildschirm abgebildet. 
Die Komponente wird in der Größe verändert. 
Die Komponente wurde beschädigt und muß repariert werden (zum Beispiel wurde etwas verschoben, das vorher die Komponente verdeckte, und ein vorher verdeckter Teil der Komponente wird sichtbar).
Möglicherweise treten zu Beginn die ersten beiden Fälle nacheinander auf, was den wiederholten Besuch der paint()-Methode erklären könnte. Ansonsten ist paint(), wie gesagt, eine sogenannte "callback" Methode ("Wiederholungsbesuch"). Das heisst, daß das System die paint()-Methode wiederholt besuchen darf, wann immer es das für angebracht hält.


----------



## SlaterB (30. Sep 2009)

heißt callback nicht eher was anderes? 
Rückruffunktion ? Wikipedia


----------



## André Uhres (30. Sep 2009)

SlaterB hat gesagt.:


> heißt callback nicht eher was anderes?
> Rückruffunktion ? Wikipedia


Hier ist es offenbar in dem Sinn zu verstehen, daß eine bestimmte Methode jedesmal wieder aufgerufen wird (also einen Wiederholungsbesuch bekommt), wenn etwas geschieht, das sie interessiert. Das kann eins der drei oben erwähnten Ereignisse sein, oder eine interne Zustandsänderung der betroffenen Komponente (repaint Antrag der Anwendung).


----------



## MrGe (30. Sep 2009)

@timriddance

Lies das Tutorial "Zeichnen in Swing"!

Das beschreibt u.a. genau dein Problem.


----------



## André Uhres (30. Sep 2009)

... hier ist es: http://www.java-forum.org/awt-swing...r-gui-programmierung-tutorial.html#post272862

Hier noch einige weiterführende Tutorials für die, die mehr wissen wollen:
Malen in Swing Teil 1: der grundlegende Mechanismus - Byte-Welt Wiki
Malen in Swing Teil 2: ein einfaches Malprogramm - Byte-Welt Wiki
Malen in AWT und Swing - Byte-Welt Wiki


----------

