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 :
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 :
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 :
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.
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.