SWING - repaint() ohne wirkung

Hallo zusammen,

ich weiß jetzt nicht mehr weiter!

Ich habe einen JFrame mit einem Borderlayout versehen und im „Norden“ einen JButton hinzugefügt.
Im „Center“ hab ich ein JPanel mit einem FlowLayout. Nun möchte ich auf Knopfdruck auf dieses JPanel weitere kleine Panels (mit einem Bild drauf) hinzufügen.

So weit funktioniert alles, nur werden alle Komponenten die ich nachträglich (also beim klick auf den Button) hinzufüge nicht gezeichnet obwohl ich für den Frame repaint() aufrufe. Die werden erst sichtbar, wenn ich das Fenster kleiner/größer ziehe.
Testhalber hab ich mal überall in die paint() aller Komponenten eine Konosolenausgabe eingebaut - Ergebnis: die werden erst bei einer Größenänderung des Fensters gerufen.
Habs auch mal mit AWT versucht - der gleiche Effekt.

Hat jemand schon mal so ein Problem gehabt/gelöst?

Danke und Gruß, Ingo

Moien

So weit funktioniert alles, nur werden alle Komponenten die
ich nachträglich (also beim klick auf den Button) hinzufüge
nicht gezeichnet obwohl ich für den Frame repaint() aufrufe.

Ruf zuerst pack() auf.

cu

Hi!

Super, so geht’s! DANKE!!!

Steht das irgendwo in der java doc?

Moien

Super, so geht’s! DANKE!!!

Steht das irgendwo in der java doc?

Jein: in der Doc steht bei Container.validate() der schöne Satz: It should be invoked when this container’s subcomponents are modified (added to or removed from the container, or layout-related information changed) after the container has been displayed.

pack() macht an sich genau das gleiche, nur für alle Container im Fenster. Und pack() past netterweise die Größe des Fensters optimal an.

cu