Slyh: Flimmerfreie Anzeige bei Mehrfachaufruf von paint(Graphics g)

Beitrag lesen

Hallo uepselon,

[..] nur muss jedesmal die Methode repaint() aufgerufen werden um die Darstellung Aufrecht zu erhalten. Was unweigerlich dazu führt, das die ganze Anwendung zu flackern anfängt wenn mit der Maus ein Bild verschoben wird. Gibt es eine bessere Möglichkeit, sowas zu realisieren?

Die Methode "repaint()" ruft nicht etwa die Methode "paint()" auf, sondern
die Methode "update()". Und in "update()" passiert grob beschrieben folgendes:

public void update(Graphics g) {
   g.clearRect(0, 0, width, height);
   paint(g);
}

Es wird also zuerst der Zeichenbereich vollständig mit der Hintergrundfarbe
übermalt und dann erst paint() aufgerufen. Durch das Übermalen mit der
Hintergrundfarbe entsteht das Flackern. Die Abhilfe besteht ganz einfach
darin, daß du die Methode "update()" überschreibst und darin nur "paint(g)"
aufrust. Also etwa so:

public void update(Graphics g) {
    paint(g);
}

Und schon müßte das Flackern verschwunden sein.
Natürlich mußt du dich dann selbst drum kümmern, falls irgendwelche Teile
der Zeichenfläche gelöscht werden müssen. Das scheinst du ja aber schon zu
tun, da du jedesmal den Hintergrund komplett neu zeichnest.

Gruß
Slyh