LayoutManager Erst layouten, dann zeichnen

mariog86

Neues Mitglied
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?
 
G

Gast2

Gast
Mach mal ein KSKB, dass hab ich ja noch nie gesehen...
Für sowas würde ich auch ein CardLayout verwenden...
 

mariog86

Neues Mitglied
Ich habe es auch nach mehreren Stunden nicht geschafft ein KSKB zu erstellen, dass den Fehler reproduziert.
Ich kann mir aber vorstellen, dass das Problem irgendwie damit zusammenhängt, dass ich gewisse Layoutinformationen neu berechnen muss, wenn die Komponente geresized wird, z.B. wird der Rahmen umso breiter je grösser die Fläche, ebenfalls die Schriften und Buttons.
Diese Informationen berechne ich im ComponentEvent wenn es die ID COMPONENT_RESIZED hat. Das Problem ist nun wahrscheinlich, dass dieses Event nicht sofort aufgerufen wird, wenn die Grösse vom Layoutmanager geändert wurde, sondern irgendwann später. Leider konnte ich nirgendo herausfinden wann genau der Event ausgelöst wird und ob es immer vor paintComponent ausgelöst wird.
Wenn ich direkt setSize überbreibe und die Berechnungen dort mache, tritt das Problem jedenfalls nicht auf. Allerdings finde ich diese Variante nicht sehr sauber, da setSize ja nicht die einzige Möglichkeit ist, die Grösse zu setzen. Gibt es keine bessere Möglichkeit sofort und vor Aufruf von paintComponent über eine Grössenänderung informiert zu werden?
 
G

Gast2

Gast
Dann musst du wohl deinen Code umbauen wenn das KSKB funktioniert...
Kommentier stückweise deinen Code aus bis der Fehler nicht mehr kommt dann weißt du wo das Problem ist.
Oder du versuchst es erst einmal mit debugen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Swing Buttons erst nach Klick sichtbar AWT, Swing, JavaFX & SWT 13
K Swing Buttons erst blinken lassen und dann abfragen, ob sie gedrückt worden sind AWT, Swing, JavaFX & SWT 2
VPChief Buttons Reagieren erst wenn ich Fenster minimiere AWT, Swing, JavaFX & SWT 4
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
E Warum wird Text im JTextArea erst am Programmende angezeigt ? AWT, Swing, JavaFX & SWT 1
L Swing Komponenten erst nach Resize sichtbar AWT, Swing, JavaFX & SWT 2
L JavaFX Animation, erst zeichnen dann anzeigen AWT, Swing, JavaFX & SWT 4
T JButton wird beim vergrößern des Fensters erst sichtbar AWT, Swing, JavaFX & SWT 4
L JTextField erscheint erst nach Veränderung der Framegröße AWT, Swing, JavaFX & SWT 5
U Swing Inhalt vom Fenster wird erst durch Hovern oder Klicken sichtbar AWT, Swing, JavaFX & SWT 3
P JavaFX Slider soll Value erst ab einer bestimmten Bedinung aendern AWT, Swing, JavaFX & SWT 19
T JButton überlagern sich und werden erst beim Mausscrollen sichtbar AWT, Swing, JavaFX & SWT 2
X JFrame erst nach dem Laden sichtbar stellen AWT, Swing, JavaFX & SWT 8
D JList&JButton erst nach Resize des JFRame sichtbar AWT, Swing, JavaFX & SWT 2
U ToolTip Größenänderung, passt sich erst beim zweiten Mal an AWT, Swing, JavaFX & SWT 6
T Eingabefelder gefüllt erst dann Button klickbar AWT, Swing, JavaFX & SWT 6
R Komponenten werden erst nach maximierung des Frames sichtbar (Linux) AWT, Swing, JavaFX & SWT 5
J 2D-Grafik JPanel wird erst 1-2sek nach start des JFrames angezeigt AWT, Swing, JavaFX & SWT 3
M Anzeige updatet sich erst am Ende des Programms AWT, Swing, JavaFX & SWT 3
J resize - Label bleibt erst schwarz AWT, Swing, JavaFX & SWT 4
V Swing Custom JToggleButton in JTable - Click-Event geht erst beim zweiten Mal AWT, Swing, JavaFX & SWT 7
P ... zeichnet erst im zweiten Anlauf AWT, Swing, JavaFX & SWT 10
L Swing JPanel erscheint erst beim Vergrößern AWT, Swing, JavaFX & SWT 4
R Fensterinhalt erscheint erst, wenn das Fenster verändert wird AWT, Swing, JavaFX & SWT 7
0 JFrame zeigt Inhalt erst nach vergrößern an AWT, Swing, JavaFX & SWT 3
G Components erscheinen erst bei Änderung des Frames AWT, Swing, JavaFX & SWT 3
xehpuk Swing Erst Components, dann Container zeichnen AWT, Swing, JavaFX & SWT 2
R JPanel wird erst neu gezeichnet nach erneuter auswahl AWT, Swing, JavaFX & SWT 8
F Swing Auf JComboBox-Event erst NACH Auswahl reagieren AWT, Swing, JavaFX & SWT 8
T JSpinner in JTable: Problem beim Auslesen, funktioniert erst beim Zellwechsel AWT, Swing, JavaFX & SWT 7
S (Applets) JProgressBar wird erst am Ende angezeigt AWT, Swing, JavaFX & SWT 13
Z JPanel wird erst durch aufziehen des Fensters sichtbar AWT, Swing, JavaFX & SWT 3
F setIcon wird erst nach der methode ausgeführt AWT, Swing, JavaFX & SWT 4
T JTable erst nach Änderung der Spaltenbreite neu zeichnen AWT, Swing, JavaFX & SWT 10
T neuer JFrame öffnet sich erst wenn Methode die dahinerliegt abgeschlossen ist. BUG? AWT, Swing, JavaFX & SWT 4
I Swing Bild wird erst bei manueller Änderung der Fenstergrösse gezeichnet AWT, Swing, JavaFX & SWT 3
F Swing Button reagiert erst beim mehrmaligen Anklicken AWT, Swing, JavaFX & SWT 6
S Swing PopUp oeffnet sich nach der Methode, die erst nach Fensteraufruf gestartet wird AWT, Swing, JavaFX & SWT 3
R JButton -> erst sichtbar nach rollover AWT, Swing, JavaFX & SWT 9
F JButton reagiert erst beim 2 klick AWT, Swing, JavaFX & SWT 8
T JLabel.setText() funktioniert erst nach repaint() etc.? AWT, Swing, JavaFX & SWT 4
S JComboBox in JTable wird erst nach klick angezeigt AWT, Swing, JavaFX & SWT 2
N JFormattedTextField erst Verlassen, wenn Eingabe korrekt AWT, Swing, JavaFX & SWT 6
G Textarea zeigt Text erst am Schluss an AWT, Swing, JavaFX & SWT 2
T JButton wird erst bei mouseover sichtbar AWT, Swing, JavaFX & SWT 2
A Buttons erscheinen erst beim rüberfahren AWT, Swing, JavaFX & SWT 13
G Fenster erst nach Stoppen des Threads anzeigen AWT, Swing, JavaFX & SWT 3
Z Buttons erscheinen erst wenn man mit der Maus drüber geht AWT, Swing, JavaFX & SWT 7
G Elemente erst da wenn mit Maus drüber gefahren bin AWT, Swing, JavaFX & SWT 2
A JTree wird erst nach Klick aktualisiert AWT, Swing, JavaFX & SWT 2
X JTable "geht" erst beim 2.Klick AWT, Swing, JavaFX & SWT 2
G Tabelle aktualisiert sich erst, nachdem man auf sie klickt! AWT, Swing, JavaFX & SWT 4
P JTextArea erst nach Maximierung sichtbar AWT, Swing, JavaFX & SWT 3
T SWT - Inhalt einer Shell erst nach Größenänderung vorhanden AWT, Swing, JavaFX & SWT 5
B JPanel erst durch Button-Klick sichtbar machen AWT, Swing, JavaFX & SWT 8
M Java mit Swing - Elemente erst nach klick sichtbar AWT, Swing, JavaFX & SWT 13
C JPanel erst nach Button click anzeigen. AWT, Swing, JavaFX & SWT 11
A Panelinhalt erscheint erst nach Mouseklick auf den Framerand AWT, Swing, JavaFX & SWT 6
B Fensterinhalt baut sich erst bei Größenveränderung auf AWT, Swing, JavaFX & SWT 3
T JSlider getValue() erst nach dem Loslassen des Mauszeigers AWT, Swing, JavaFX & SWT 3
M GUI mit Swing erst nach Maximieren richtige Anzeige AWT, Swing, JavaFX & SWT 2
M componenten im jframe erst nach fensterveränderung sichtbar AWT, Swing, JavaFX & SWT 2
J JTable Änderung erst beim Zeilenwechsel AWT, Swing, JavaFX & SWT 5
S [JTable] Editor erst nach Doppelklick AWT, Swing, JavaFX & SWT 5
S LaF - switcht erst während des Runs auf System.LaF AWT, Swing, JavaFX & SWT 2
N JPanel zeichnet Inhalt erst nach Größenänderung des JFrames AWT, Swing, JavaFX & SWT 3
M LookAndFeel? Erst beim 2.Mal Öffnen eines Menüs? AWT, Swing, JavaFX & SWT 3
M Panels werden erst beim max. oder min. des Fensters sichtbar AWT, Swing, JavaFX & SWT 2
S GridBagLayout "links-rechts-layouten" AWT, Swing, JavaFX & SWT 7
T Checkboxen layouten AWT, Swing, JavaFX & SWT 20
K Warum genau hat man einen Listener, dann ein Event und was ist ein Adapter AWT, Swing, JavaFX & SWT 2
M JavaFX Ein Labeltext eine zeitlang anzeigen dann weiter machen AWT, Swing, JavaFX & SWT 3
E [JavaFX]Wenn felder belegt dann Meldung Verwerfen? AWT, Swing, JavaFX & SWT 2
N SWT In welche Ebene gehört dann die function() AWT, Swing, JavaFX & SWT 8
O Swing JDialog öffnen und dann warten bis er geschlossen wurde AWT, Swing, JavaFX & SWT 2
C Im ActionListener Buttons disablen, einen Thread starten, dann Buttons enablen AWT, Swing, JavaFX & SWT 2
D Swing Bestimmte Berechnung von Spalten durchführen und dann die Zeilen nach bestimmten Kriterien einfärben AWT, Swing, JavaFX & SWT 5
B Swing Bild von Webseite herunterladen, diese dann in JList anzeigen. AWT, Swing, JavaFX & SWT 1
A Swing 2 JSlider verknüpfen und mit einem JTextField vergleichen, dann Ausgabe AWT, Swing, JavaFX & SWT 5
K JButton nur dann aktivieren, wenn die Mouse 3 Sek. über dem Button bleibt AWT, Swing, JavaFX & SWT 2
Daniel_L Grafik erstellen, drin zeichnen und dann speichern AWT, Swing, JavaFX & SWT 2
F Swing Mehrere Textfelder in Scrollpane einfügen und dann zum Scrollen bringen? AWT, Swing, JavaFX & SWT 4
1 BufferedImage in byte[], dann in String und zurück AWT, Swing, JavaFX & SWT 7
S JEditorPane soll HTML und dann Text anzeigen..? AWT, Swing, JavaFX & SWT 5
G JLabel zu lang, dann . AWT, Swing, JavaFX & SWT 7
T Jbutton geklickt, dann neues Fenster AWT, Swing, JavaFX & SWT 4
S Button drücken und dann weiter? AWT, Swing, JavaFX & SWT 12

Ähnliche Java Themen

Neue Themen


Oben