Seltsame Darstellung verschachtelter GridBagLayouts

Status
Nicht offen für weitere Antworten.
Z

zworK

Gast
Hallo erstmal,

ich habe ein seltsames, ich nenne es mal Phänomen, mit verschachtelten JPanels mit GridBagLayout.
Das GridBagLayout sollte eigentlich bei 2 Spalten mit gesetztem fill und ColumnWeights der Constraints ein
JPanel horizontal zu je 50% unterteilen. Füge ich nun in die Spalten, links sowie rechts, ein weiteres JPanel mit
GridBagLayout ein, in dem Textfelder sitzen, verschieben sich die Proportionen zur Laufzeit, wenn sich die Daten im Textfeld ändern.

Soll heißen : ich schreibe einen Satz in das Textfeld, löse ein neuzeichnen z.B. durch ein resize auf, und aus 50% / 50% wird eine 70% / 30%

In meiner Anwendung sollen diese Unter-Panels in den 2 Spalten Formale sein. Ich werde mein Vorgehen mal anhand von BeispielCode verdeutlichen.

Hier meine kleine Formularklasse :

Code:
public class SimpleForm extends JPanel{
	
	private int counter;
	private GridBagConstraints gbc;
	
	public SimpleForm(String title) {
						
		this.setLayout(new GridBagLayout());

		this.setBorder(BorderFactory.createTitledBorder(title));

		gbc = new GridBagConstraints();
		
		gbc.insets = new Insets(3,3,3,3);
		gbc.fill = GridBagConstraints.HORIZONTAL;
		gbc.gridwidth=1;
		
		counter = 0;
	}
	
	private void appendRow(String desc, JTextField text) {
		
		JLabel title = new JLabel(desc+" :",JLabel.RIGHT);

		gbc.gridy = counter++;

		gbc.weightx = 0;
		gbc.gridx = 0;	
		this.add(title,gbc);
		
		gbc.weightx = 1;		
		gbc.gridx = 1;
		this.add(text,gbc);
	}
}

Damit erstelle ich mir 3 Formularklassen die ich wie folgt in einem Panel anordnen möchte :

2 Spalten und 2 Zeilen

Beide Spalten sollen je 50% des Panels horizontal in Anspruch nehmen.

Das erste Formular soll die linke Spalte füllen.
Die 2 weiteren teilen sich jeweils die rechte Spalte zu 50% in der Höhe.

Hier mal als Beispiel-Code :

Code:
JPanel dataPanel = new JPanel(new GridBagLayout());
		
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill=GridBagConstraints.BOTH;
gbc.insets = new Insets(3,3,3,3);

gbc.weightx=1;
gbc.weighty=1;


// Erste Spalte		
gbc.gridheight=2;

gbc.gridx=0;
gbc.gridy=0;
dataPanel.add(createPanel1(),gbc);

// Zweite Spalte
gbc.gridheight=1;
		
gbc.gridx=1;
gbc.gridy=0;
dataPanel.add(createPanel2(),gbc);
	
gbc.gridx=1;
gbc.gridy=1;
dataPanel.add(createPanel3(),gbc);

in den createPanel Methoden wird dann ein eine Instanz des SimpleForm erstellt und zurückgegeben.
Füge ich dort keine Zeilen per addRow(..) ein, lasse die 3 Unter-Panels also leer, wird alles korrekt in den richtigen Proportionen angezeigt.

Füge ich jedoch Zeilen wie folgt hinzu :
Code:
private JPanel createPanel1() {
		
	SimpleForm panel = new SimpleForm("Panel 1");
		
	panel.addRow("Eintrag :",new JTextField("Test"));
		
	return panel;
}

und fülle nun das Textfeld in der laufenden Anwendung, ändern sich die Größen der Panels beim Neuzeichen, z.B. durch ein rezise. So werden die 2 Spalten nicht mehr 50% / 50% geteilt, sondern z.B. mal 70% / 30%.

Und da hört das Verständnis bei mir auf :)
Ich hoffe das war verständlich und jemand weiß Rat, wie ich dieses Verhalten in den Griff bekomme, bzw verstehe.
 
B

Beni

Gast
Durch das füllen der Textfelder ändert sich deren bevorzugte Grösse (preferred size). Das Veränderung wird nach oben propagiert, d.h. auch das Panel auf dem das Textfeld sitzt, möchte eine andere Grösse haben. Das GridBagLayout spielt nun willig mit, und versucht es allen recht zu machen. Wer ein bisschen mehr Platz benötigt, bekommt ein bisschen mehr...

Ich würde:
- entweder einen anderen LayoutManager (z.B. nur GridLayout) verwenden
- oder die preferred size selbst festlegen (kann aber später Probleme geben)
- oder die Panels in JSplitPane's sammeln. Die SplitPanes haben den Vorteil, dass auch der Benutzer selbst noch ein bisschen rumspielen darf :wink:
 
Z

zworK

Gast
Vielen Dank für die Hinweise.
Das GridLayout ist für diesen Fall perfekt. Manchmal sieht man den Wald vor lauten Bäumen nicht :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Seltsame Exception bei setVisible(true) Methode in einem JFrame AWT, Swing, JavaFX & SWT 2
KilledByCheese Swing Seltsame Ausgabe nach ButtonClick AWT, Swing, JavaFX & SWT 1
F Swing Seltsame Selektierung in JTable AWT, Swing, JavaFX & SWT 0
S Swing Swing macht sehr seltsame Zeichnungen. AWT, Swing, JavaFX & SWT 13
F Swing Seltsame Exception AWT, Swing, JavaFX & SWT 5
P seltsame Performance Probleme bei 2 Guis abhängig vom Aufruf AWT, Swing, JavaFX & SWT 8
D Seltsame AWT-Exception AWT, Swing, JavaFX & SWT 2
E GridLayout seltsame Anordnungsstrategie AWT, Swing, JavaFX & SWT 6
MiMa Darstellung von FXML ateien nicht korrekt (SceneBuilder) AWT, Swing, JavaFX & SWT 2
D Button und Textfeld Darstellung AWT, Swing, JavaFX & SWT 3
G listener repaint() - verschiedene Darstellung AWT, Swing, JavaFX & SWT 24
H JavaFX - Button und Text - Falsche Darstellung AWT, Swing, JavaFX & SWT 3
Y Darstellung und MouseHover bei bestimmten Wörtern in einem String AWT, Swing, JavaFX & SWT 2
W Swing bzgl. Tableskalierung/Darstellung einer Matrix AWT, Swing, JavaFX & SWT 8
J Problem mit Button darstellung AWT, Swing, JavaFX & SWT 23
M Swing JTable, wie erreiche ich folgende Darstellung? AWT, Swing, JavaFX & SWT 10
M AWT LabelArray verschobene Darstellung AWT, Swing, JavaFX & SWT 2
B Transformation und Darstellung von Koordinaten AWT, Swing, JavaFX & SWT 5
N Swing Java Komponente zur Darstellung von klickbaren Links, die Java Funktionen ausführen können AWT, Swing, JavaFX & SWT 2
A Swing Darstellung von JComponents in Swing AWT, Swing, JavaFX & SWT 14
M Swing JTable drucken/Darstellung AWT, Swing, JavaFX & SWT 2
E Swing Darstellung einer Zeilenbar AWT, Swing, JavaFX & SWT 6
M Eine nicht korrekte Darstellung bei repaint() warum? AWT, Swing, JavaFX & SWT 4
U Swing Problem bei der Darstellung "komplexer Objecte" in einer JList mit AbstractListModel: AWT, Swing, JavaFX & SWT 3
Y LayoutManager Keine vollständige Darstellung der Tabelle mit GridBagLayout AWT, Swing, JavaFX & SWT 3
A Darstellung dauert zu lange. Wie rest verzögern? AWT, Swing, JavaFX & SWT 7
S LayoutManager Fehlerhafte Darstellung einer Statusleiste/Statusbar AWT, Swing, JavaFX & SWT 6
H Thread-Problem mit der Darstellung beim Sperren des Fensters AWT, Swing, JavaFX & SWT 2
S Grafische Darstellung von signalen AWT, Swing, JavaFX & SWT 2
S jTable size und Text darstellung AWT, Swing, JavaFX & SWT 2
L SWT Darstellung des Datums in Textfeld? AWT, Swing, JavaFX & SWT 2
M SWT Probleme bei der Darstellung des "&"-Zeichens... AWT, Swing, JavaFX & SWT 3
E Darstellung komplexer Formen, z.B. gebogener Pfeil AWT, Swing, JavaFX & SWT 2
P Problem mit Darstellung von JButton(s) AWT, Swing, JavaFX & SWT 2
D Darstellung in Swing wie HTML? AWT, Swing, JavaFX & SWT 2
R Darstellung von JButton AWT, Swing, JavaFX & SWT 6
G Swing Darstellung JTable AWT, Swing, JavaFX & SWT 2
T Swing Java Darstellung einer Tabelle AWT, Swing, JavaFX & SWT 3
S Unterschiedliche Darstellung Java 5 und 6 AWT, Swing, JavaFX & SWT 7
B Probleme bei JPanel Darstellung AWT, Swing, JavaFX & SWT 6
M GBL - Darstellung gestreckt? AWT, Swing, JavaFX & SWT 3
P Applet darstellung von Textfeldern Problem AWT, Swing, JavaFX & SWT 3
O JComboBox andere Darstellung des Inhaltes + größe der Auswah AWT, Swing, JavaFX & SWT 11
M Swing mit Gtk - Fehlerhafte Darstellung AWT, Swing, JavaFX & SWT 3
S JTree - Darstellung von Ordnern rückwärts AWT, Swing, JavaFX & SWT 4
C Fragen zur Darstellung einer JTable mittels Renderer AWT, Swing, JavaFX & SWT 2
H Darstellung einer Kurve im Koordinatensystem AWT, Swing, JavaFX & SWT 8
T [gelöst] JFrame Grundlagen (Größe und Darstellung) AWT, Swing, JavaFX & SWT 6
G JTable dynamische Darstellung der ankommenden Daten AWT, Swing, JavaFX & SWT 19
G Darstellung von JComboBox AWT, Swing, JavaFX & SWT 14
S Gui Darstellung AWT, Swing, JavaFX & SWT 2
M Komische Sache bei der Darstellung auf einem JPanel AWT, Swing, JavaFX & SWT 5
S Swing Element für Explorer-Fenster darstellung AWT, Swing, JavaFX & SWT 13
P Darstellung eines Graphen AWT, Swing, JavaFX & SWT 2
G keine darstellung in JTable AWT, Swing, JavaFX & SWT 2
A JLabel: Unterschiede zw. JRE 1.3 und 1.5 in der Darstellung AWT, Swing, JavaFX & SWT 3
B Komische Darstellung unter Windows 2000 AWT, Swing, JavaFX & SWT 2
M SWT Darstellung Linux / Win verschieden? AWT, Swing, JavaFX & SWT 4
P Fehlerhafte Darstellung bei JLabel.setText AWT, Swing, JavaFX & SWT 2
C Timer, Darstellung einer Uhr AWT, Swing, JavaFX & SWT 4
D Wie Darstellung / Layout als Liste AWT, Swing, JavaFX & SWT 2
T darstellung eines polynom 5.grades AWT, Swing, JavaFX & SWT 2
S JTable + Sortieren => Problem bei Darstellung AWT, Swing, JavaFX & SWT 13
U JSlider - Probleme bei der Darstellung AWT, Swing, JavaFX & SWT 3
V jTalbe: Probs bei Icon Darstellung AWT, Swing, JavaFX & SWT 4
Z Empfehlung für solche Darstellung! AWT, Swing, JavaFX & SWT 4
F Darstellung von Tastaturkürzel in JMenuItem AWT, Swing, JavaFX & SWT 13
R Mehrzeilige Darstellung von Spalten in SWING-Tabellen AWT, Swing, JavaFX & SWT 5
M Problem mit JTree-Darstellung AWT, Swing, JavaFX & SWT 5
T Problem mit Darstellung AWT, Swing, JavaFX & SWT 6
W Verschachtelter ActionListener AWT, Swing, JavaFX & SWT 0

Ähnliche Java Themen

Neue Themen


Oben