Komponenten verändern eigenständig ihre Größe

Hurricane123

Grünschnabel
Hallo liebe Foren Gemeinde !

Ich hab ein ganz dickes Problem.

Ich arbeite an einen Java-Projekt für die Schule. Es geht um die Auswertung von Daten die über eine Textdatei eingelesen und ausgewertet werden sollen etc...

Dies nur kurz zur Einführung, das Programm ist fertig und funktioniert wie erwartet. Mein Problem liegt beim Layout.

Ich arbeite mit einem GridBagLayout. Die Anordnung entspricht auch (weitesgehend) meinen Erwartungen.

Nun zum eigentlichen Problem:

Nachdem ich eine Textdatei eingelesen hab wird der Inhalt in die linke JListBox geschrieben. Wenn ich nun die Daten sortiere und die verchiedenen JRadiouttons aktiviere, bzw. die JComboBoxen fülle verändert sich die Größe der Komponenten.
Genauer gesagt, die komplette Linke Seite wird breiter (Also alle Komponenten auf der linken Seite).

Ich vermute es liegt daran das sich irgendwelche Abstände oder Größen verändern wenn die ComboBoxen gefüllt, bzw. die RadioButtons den Fokus haben.
Leider habe ich nur nix brauchbares hierzu im Web gefunden.

Der grundsätzliche Aufbau ist folgender:
Es gibt ein Hauptpanel mit GridBagLyout und 2 Spalten denen die ganzen komponenten hinzugefügt werden.
Die JRadioButtons sind auf einem eigenen Panel, ebenfalls mit GridBagLayout angeordnet.

Ich hoffe ihr könnt mir helfen.

Schonmal vielen Dank im voraus.

Hier ist der Link zum Teil des Quelltextes in dem das Layout initialisiert wird:
http://nopaste.php-quake.net/29921

Als Anhang noch die Bilder bevor und nachdem sich das Layout geändert hat.
 

Anhänge

  • layout_messdaten.JPG
    layout_messdaten.JPG
    28,6 KB · Aufrufe: 14
  • messdaten_danach.JPG
    messdaten_danach.JPG
    45,5 KB · Aufrufe: 14
Haben linke und rechte Seite die selbe Gewichtung in y Richtung?


Hi.
Also ich hab in y-Richtung bisher keine Gewichtung angegeben, hab das aber gerade mal ausprobiert und in y-Richtung allen die gleiche Gewichtung gegeben. Hatte aber auf das angesprochene Problem leider keine Auswirkung. Es hat sich halt nur die Anordnung in y-Richtung angepasst.
 
Hallo,

ich vermute, es liegt daran, dass wenn die Listen, ComboBoxen etc. gefüllt werden verändert sich ihre preferredSize, und die ist wohl auf der linken Seite etwas größer. Eigentlich setzt du ja schon die Gewichtung in den Layout Constraints auf 0.5, aber offensichtlich reicht das nicht. Ich würde die linke und die rechte Seite komplett von einander trennen, sie auf eigene Panels packen und mittels GridLayout(1, 2) platzieren. Die restlichen Komponenten auf den jeweiligen Panels wie bis jetzt mit dem GridBagLayout layouten. Der Vorteil ist, dass das GridLayout wirklich dafür sorgt, dass die Zellen gleich groß sind, unabhängig von dem Inhalt.

Grüße
Vincent
 
Hallo,

ich vermute, es liegt daran, dass wenn die Listen, ComboBoxen etc. gefüllt werden verändert sich ihre preferredSize, und die ist wohl auf der linken Seite etwas größer. Eigentlich setzt du ja schon die Gewichtung in den Layout Constraints auf 0.5, aber offensichtlich reicht das nicht. Ich würde die linke und die rechte Seite komplett von einander trennen, sie auf eigene Panels packen und mittels GridLayout(1, 2) platzieren. Die restlichen Komponenten auf den jeweiligen Panels wie bis jetzt mit dem GridBagLayout layouten. Der Vorteil ist, dass das GridLayout wirklich dafür sorgt, dass die Zellen gleich groß sind, unabhängig von dem Inhalt.

Grüße
Vincent

Hallo,

erstmal danke für die Antworten. Auf die einfachste lösung bin ich natürlich nicht gekommen.
Jedoch verändert sich die Größe immer noch ...
Ein Idee von mir wäre jetzt für jede einzelne Komponente die preferred Size zu setzen, aber macht das Sinn ? Wäre ja ziemlich aufwendig ... da ich ja die gesamte Größe des Fenster in Prozent angebe, abhängig von der Bildschirmauflösung ...

Hier noch mal der aktuelle Quelltext:
http://nopaste.php-quake.net/30254

Gruß Hurricane ...
 

Anhänge

  • layout_neu.JPG
    layout_neu.JPG
    24,6 KB · Aufrufe: 11
  • layout_danach_neu.JPG
    layout_danach_neu.JPG
    40,4 KB · Aufrufe: 8
Hi.

Das ganze hat sich nun endlich erledigt. Ich hab das ganze über ein Null - Layout realisiert. Funktioniert einwandfrei. Trotzdem vielen Dank an alle die geholfen haben.

Gruß Hurricane
 
Hi

Hab jetzt nicht jeden Post genau verfolgt, aber falls du zukünftig mal ein komplexeres Layout gestallten willst, bei dem die Komponenten auch variabel platziert werden können und trotzdem automatisch ihre Größe anpassen, dann empfehle ich das FormLayout.

Man muss zwar etwas mehr schreiben, aber dafür kann man Elemente direk anhand der benachbarten Elemente anordnen. Ich persönlich nutze hauptsächlich dieses Layout und für kleinere eingebetete Bereich das GridLayout.

Ich hab damals auch viel mit GridBagLayout herumexperimentiert, bin aber nur selten zu dem gewünschten Ergebnis gekommen (mag natürlich auch daran liegen dass ich etwas falsch gemacht habe)

Hier mal ein kurzes SWT-Beispiel (ich bin mir gerade nicht sicher ob dieses Layout, in dieser Form, standardmäßig in Java integriert ist - da ich SWT/JFace bevorzuge. Es gibt es aber definitiv als zusätzliches Jar irgendwo).
 
Zurück