Hallo
Nachdem ich dem GridBagLayout manager endlich beibringen konnte, wie er meine Komponenten richtig layouten soll, ist mir ein Problem beim Anzeigen aufgefallen.
Ich habe in meiner Applikation eine Art Assistent, durch den man sich mit einem Weiter Button durchklicken kann. Dies ist so gelöst, dass ich bei einem Klick auf weiter jeweils das ensprechende JPanel dem übergeordneten JPanel hinzufüge und das vorhergehende entferne. Das Problem ist nun, dass Swing sobail ich auf dem übergeordneten Panel repaint() aufrufe, was nötig ist, da die Anzeige sonst nicht korrekt aktualisiert wird, zuerst alle Komponenten zeichnet, dann die Komponenten layoutet und dann nochmal zeichnet. Dies führt dazu, dass man sieht wie die Komponenten vom LayoutManager verschoben und geresized werden.
Ich habe schon versucht mit doLayout() und validate() ein Layout durchzuführen bevor ich repaint() aufrufe. Dies scheint aber wirkungslos zu sein. Wenn ich einen Breakpoint beim Component resize event setze und einen bei paintComponent, kann ich sehen, wie zuerst paint component aufgerufen wird und alles gezeichnet wird anhand der ursprünglichen grösse des Panels.
Danach wird das resize event aufgerufen, worauf alle Grössen und Positionen korrekt gesetzt werden und durch einen weiteren Aufruf von paintComponent dann auch korrekt dargestellt werden.
Ich habe schon versucht die JPanels in einem CardLayout abzulegen, in der Hoffnung dass sie bereits gelayoutet werden, wenn ich sie zum CardLayout hinzufüge. Ausserdem habe ich versucht sie zuerst invisible zu setzen zu repainten und dann wieder auf visible zu setzen. Es nützt aber alles nichts die Komponenten werden erst gelayoutet nachdem sie schon einmal gezeichnet wurden.
Wie kann ich Swing dazu bringen erst alles fertig zu layouten und erst dann zu zeichnen?
Nachdem ich dem GridBagLayout manager endlich beibringen konnte, wie er meine Komponenten richtig layouten soll, ist mir ein Problem beim Anzeigen aufgefallen.
Ich habe in meiner Applikation eine Art Assistent, durch den man sich mit einem Weiter Button durchklicken kann. Dies ist so gelöst, dass ich bei einem Klick auf weiter jeweils das ensprechende JPanel dem übergeordneten JPanel hinzufüge und das vorhergehende entferne. Das Problem ist nun, dass Swing sobail ich auf dem übergeordneten Panel repaint() aufrufe, was nötig ist, da die Anzeige sonst nicht korrekt aktualisiert wird, zuerst alle Komponenten zeichnet, dann die Komponenten layoutet und dann nochmal zeichnet. Dies führt dazu, dass man sieht wie die Komponenten vom LayoutManager verschoben und geresized werden.
Ich habe schon versucht mit doLayout() und validate() ein Layout durchzuführen bevor ich repaint() aufrufe. Dies scheint aber wirkungslos zu sein. Wenn ich einen Breakpoint beim Component resize event setze und einen bei paintComponent, kann ich sehen, wie zuerst paint component aufgerufen wird und alles gezeichnet wird anhand der ursprünglichen grösse des Panels.
Danach wird das resize event aufgerufen, worauf alle Grössen und Positionen korrekt gesetzt werden und durch einen weiteren Aufruf von paintComponent dann auch korrekt dargestellt werden.
Ich habe schon versucht die JPanels in einem CardLayout abzulegen, in der Hoffnung dass sie bereits gelayoutet werden, wenn ich sie zum CardLayout hinzufüge. Ausserdem habe ich versucht sie zuerst invisible zu setzen zu repainten und dann wieder auf visible zu setzen. Es nützt aber alles nichts die Komponenten werden erst gelayoutet nachdem sie schon einmal gezeichnet wurden.
Wie kann ich Swing dazu bringen erst alles fertig zu layouten und erst dann zu zeichnen?