GridBagLayout

MariusMeier

Mitglied
Hallo zusammen

Habe Schwierigkeiten mit dem GridBagLayout. Folgender Code ist gegeben:

Code:
GridBagLayout gbl = new GridBagLayout();
		GridBagConstraints gbc;
		setLayout(gbl);
		
		gbc = makegbc(0,0,1,1);
		gbc.weightx = 2;
		gbc.weighty = 2;
		gbc.fill = GridBagConstraints.BOTH;
		gbl.setConstraints(RezeptName, gbc);
		contentPane.add(RezeptName);
		
		gbc = makegbc(0,1,1,1);
		gbc.weightx = 5;
		gbc.weighty = 5;
		gbc.fill = GridBagConstraints.BOTH;
		gbl.setConstraints(insertRezept, gbc);
		contentPane.add(insertRezept);
		
		gbc = makegbc(0,2,1,1);
		gbc.weightx = 40;
		gbc.weighty = 40;
		gbc.fill = GridBagConstraints.BOTH;
		gbl.setConstraints(RezeptListe, gbc);
		contentPane.add(RezeptListe);
		
		
		gbc = makegbc(1,0,1,1);
		gbc.weightx = 2;
		gbc.weighty = 2;
		gbc.fill = GridBagConstraints.BOTH;
		gbl.setConstraints(newRezept, gbc);
		contentPane.add(newRezept);
		
		gbc = makegbc(2,2,1,1);
		gbc.weightx = 2;
		gbc.weighty = 2;
		gbc.fill = GridBagConstraints.BOTH;
		gbl.setConstraints(tabelleRezept, gbc);
		contentPane.add(new JScrollPane(tabelleRezept));
		
		gbc = makegbc(2,0,1,1);
		gbc.weightx = 2;
		gbc.weighty = 2;
		gbc.fill = GridBagConstraints.BOTH;
		gbl.setConstraints(loadRezept, gbc);
		contentPane.add(loadRezept);
		
		/*gbc = makegbc(3,0,1,1);
		gbc.weightx = 2;
		gbc.weighty = 2;
		gbc.fill = GridBagConstraints.BOTH;
		gbl.setConstraints(updateRezept, gbc);
		contentPane.add(updateRezept);
		
		gbc = makegbc(3,1,1,1);
		gbc.weightx = 40;
		gbc.weighty = 40;
		gbc.fill = GridBagConstraints.BOTH;
		gbl.setConstraints(introductions, gbc);
		contentPane.add(introductions);
		
		gbc = makegbc(4,0,1,1);
		gbc.weightx = 2;
		gbc.weighty = 2;
		gbc.fill = GridBagConstraints.BOTH;
		gbl.setConstraints(deleteRezept, gbc);
		contentPane.add(deleteRezept);*/
		
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	
	public GridBagConstraints makegbc (int x,int y,int width,int height) {
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.gridx = x;
		gbc.gridy = y;
		gbc.gridwidth = width;
		gbc.gridheight = height;
		gbc.insets = new Insets(1,1,1,1);
		return gbc;
	}

--> new JScrollPane(tabelleRezept) wird nicht richtig angezeigt! Die tabelleRezept ist eine JTable verpackt in eine JScrollPane. Die JTable liegt unter den Buttons wenn ich das Swing-Programm starte. Was mache ich falsch

MFG Marius
 
Hallo,

auf den ersten Blick erscheint mit folgendes nicht so ganz korrekt :

Code:
gbc = makegbc(2,2,1,1);
gbc.weightx = 2;
gbc.weighty = 2;
gbc.fill = GridBagConstraints.BOTH;
gbl.setConstraints(tabelleRezept, gbc);
contentPane.add(new JScrollPane(tabelleRezept));

Du setzt die Constraints für die tabelleRezept addest aber diese in einem JScrollPane
verpackt direkt zum contendPane. Weiter oben fügst du den LayoutManager übrigens dem RootPane zu.

ALSO :

Man sollte nicht die Constrains per Hand setzen und dann die Componente adden.
Sondern die add(Component,Constraints)-Methode des Containers verwenden.
Der Container reicht die Constraints automatisch an den Layoutmanager weiter !
Und aufpassen das der Layoutmanager zuvor auch im Richtigen Container landet in
den man dann seine Komponenten einfügen will !!

Code:
GridBagLayout gbl = new GridBagLayout();
contentPane.setLayout(gbl);

.
.
.

gbc = makegbc(2,2,1,1);
gbc.weightx = 2;
gbc.weighty = 2;
gbc.fill = GridBagConstraints.BOTH;
contentPane.add(new JScrollPane(tabelleRezept),gbc)

Des weiteren kann das Contraints-Objekt immer wieder verwendet werden.
1. Also einmal erzeugen -> Eigenschaften zuweisen -> mit Komponente adden ->
2. abweichende Eigenschaften ändern -> wieder mit nächster Komponente adden
3. weiter bei 2.

Der LayoutManager erstellt sich jedes mal eine eigene Kopie der Constraints.

Gruß JAdix
 
Zurück