Slyh: Swing Formularelemente - Anzeigefehler?

Beitrag lesen

Hallo,

Es gibt eine paint() Methode,

Und darin rufst du bestimmt super.paint() auf, die wiederum eine Methode
zur Anzeige der Swing-Dialogelemente aufruft, oder?

diese enthält alle Methoden zum setzen von "statischen" Grafiken.

Was sind statische Grafiken? Wieso machst du sowas in paint()?
Was willst du damit erreichen?

Das garantiert, dass auch nach dem Minimieren etc. die Grafiken wieder angezeigt werden.

Was es ja scheinbar nicht tut. :-)

Eine update() Methode kümmert sich um das Animieren von ein paar Gifs.

Wieso sowas in update()? Und was heißt "kümmert sich um das Animieren"?

Mein Problem ist jedoch, dass die Formularelemente nichtmal beim Aufruf der genannten Methode angezeigt werden.

Welche meinst du jetzt? Die super-Methoden?

Sie werden gesetzt, aber man sieht sie nicht. Wenn ich sie anclicke, erscheinen sie. Wenn ein event z.B. setEnabled ändert, dann erscheinen sie auch.

Ja, weil sie sich dann selbst zeichnen, initiiert durch den Klick.
Das erste mal werden sie aber von paint() gezeichnet.
Und auch dann, wenn z.B. Teile durch ein anderes Fenster überdeckt
wurden und diese Teile nun neu gezeichnet werden müsen.
Wenn nun paint() nicht mehr die Methode zum Zeichnen der Komponenten
aufruft, werden diese logischerweise auch nicht mehr angezeigt. Dann
werden eben nur noch deine "statischen Grafiken" oder wasauchimmer
angezeigt.

Übrigens steht das, was ich dir gerade erzähle, auch in der API-Doku
zu paint(): "Paints the container. This forwards the paint to any
lightweight components that are children of this container. If this
method is reimplemented, super.paint(g) should be called so that
lightweight components are properly rendered."

Hintergrund: JFrame ist ein Container, kann selbst also andere
Components enthalten. (JFrame ist von java.awt.Container abgeleitet.)
Damit diese Components gezeichnet werden, muß der Container allen
enthaltenen Components sagen "Los, zeichne dich mal". Das erfolgt -
wenn ich mich recht erinnere - in der Methode paintComponents().
Genau diese Methode wird in paint() aufgerufen. Damit das auch noch
dann erfolgt, wenn du paint() überschreibst, solltest du stets auch
immer super.paint() aufrufen.

Gruß
Slyh