Buttons in JPanel in GridBagLayout

Armalyte

Grünschnabel
Hallo,

habe gerade erst angefangen mit Java Swing zu arbeiten.

Habe ein Frame mit GridBagLayout, in dem zwei Panel sind. Das erste (oben) soll 4/5 des Fensters einnehmen, das zweite (unten, weiß) dementsprechend 1/5.

Das klappt auch soweit ganz gut.

Dem unteren Panel, welches FlowLayout hat, möchte ich nun Buttons hinzufügen, was auch klappt, aber leider wird dann immer die Größe des Panels nach oben vergrößert, und das möchte ich so nicht.

Leider finde ich auch keine Lösung für dieses Problem und hoffe, hier kann mir jemand helfen. Würde mich sehr freuen und bedanke mich schonmal im voraus.

Hier mal der Code meiner Klasse:

public class EinfachesGUI extends JFrame {

//Deklarationen

GridBagConstraints gbc = new GridBagConstraints();


public GUI() {

getContentPane().setLayout(new GridBagLayout());

setSize(this.getToolkit().getScreenSize().width,this.getToolkit().getScreenSize().height);

gbc.anchor = gbc.WEST;


JPanel anzeige = new JPanel();

addGB(anzeige, 0, 0, GridBagConstraints.REMAINDER, 1, GridBagConstraints.BOTH, 1.0, 0.8);


JPanel p = new JPanel();

p.setBackground(Color.white);

p.setLayout(new FlowLayout(1, 10, 10));

addGB(p, GridBagConstraints.RELATIVE, 0, GridBagConstraints.REMAINDER, GridBagConstraints.REMAINDER, GridBagConstraints.BOTH, 1.0, 0.2);

JButton b = new JButton("Test");

p.add(b);

}

void addGB(Component c, int row, int col, int width, int height, int fill, double weightx, double weighty) {

gbc.gridx = col;
gbc.gridy = row;
gbc.gridwidth = width;
gbc.gridheight = height;
gbc.fill = fill;
gbc.weightx = weightx;
gbc.weighty = weighty;
getContentPane().add(c, gbc);

}

public static void main (String args[]){

GUI oberflaeche = new GUI();

oberflaeche.setVisible(true);

oberflaeche.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}
 
Wenn Du zwei Panel untereinander haben möchtest, sollte das obere Panel an die Stelle 0,0 und das untere an 1,0 abgelegt werden. Wenn sich das untere Panel nicht vertikal ausdehnen soll, dann musst Du das explizit auch so angeben. Ein Beispiel:
Code:
		jpButtons.add(
			jpDummy,
			new GridBagConstraints(
				1, // Zeile
				0, // Spalte
				1, // Anzahl über wie viele Spalten sich das Panel ausdehnen soll
				1, //  Anzahl über wie viele Zeilen sich das Panel ausdehnen soll
				1.0, // Gewichtung in x-Richtung
				0.0, // Gewichtung in y-Richtung, wichtig für Deine Zwecke!
				GridBagConstraints.EAST, // Verankerung des Panels links
				GridBagConstraints.HORIZONTAL, // Ausdehnung nur horizontal! Das ist der für Dich wichtige Wert für die Ausdehnung
				new Insets(2, 2, 2, 2),
				0,
				0));

Analog dazu sollte dem oberen Panel natürlich die Ausdehnung in y-Richtung aufs Auge gedrückt werden, z.B.

Code:
		jpButtons.add(
			jpDummy2,
			new GridBagConstraints(
				0, // Zeile
				0, // Spalte
				1, // Anzahl über wie viele Spalten sich das Panel ausdehnen soll
				1, //  Anzahl über wie viele Zeilen sich das Panel ausdehnen soll
				1.0, // Gewichtung in x-Richtung
				1.0, // Gewichtung in y-Richtung, wichtig für Deine Zwecke!
				GridBagConstraints.EAST, // Verankerung des Panels links
				GridBagConstraints.BOTH, // Ausdehnung in beide Richtungen. Das ist der für Dich wichtige Wert für die Ausdehnung
				new Insets(2, 2, 2, 2),
				0,
				0));
 
Danke

Vielen Dank, das hat mir geholfen.
Jedoch mußte ich dem unteren Panel doch erlauben, sich in beide Richtungen auszudehnen und ihm ein weighty von 0.1 geben, da es sonst nicht bis zum unteren Rand des Frames ging.
 
Zurück