# Dynamisches füllen von GridBagLayout: Größe der Komponenten



## jule (1. Jul 2007)

Hallo,

ich habe folgendes Problem: ich fülle dynamisch ein JPanel (mit GridBagLayout). Die Anzahl der Kompineneten in dem Panel wird auch dynamisch zur Laufzeit berechnet. Nun möchte ich die Größen der Komponenten festsetzen, damit meine JScrollPane auch "anspringt". Hab schon alles probiert, was mir irgendwie eingefallen ist, aber das geht irgendwie alles nicht  ???:L 
Bis jetzt habe ich das folgendermaßen gemacht:
Die GridBagConstraints anlegen:


```
private GridBagConstraints getGridBagConstraint(int x, int y){
		
		GridBagConstraints gbcLGen = new GridBagConstraints();
		
		gbcLGen.weightx = 1.0;
		gbcLGen.weighty = 1.0;
		gbcLGen.fill = GridBagConstraints.BOTH;
		gbcLGen.anchor = GridBagConstraints.CENTER;
		gbcLGen.gridx = x;
		gbcLGen.gridy = y;
		gbcLGen.insets = new Insets(0,10,10,0);
		gbcLGen.ipadx = 2;
		gbcLGen.ipady = 2;
		
		return gbcLGen;
	}
```

und die Jlabels definieren:


```
public JLabel getLGenValue(String text){
		JLabel gen = new JLabel();
		gen.setText(text);
		gen.setPreferredSize(new Dimension(80,23));
		gen.setMinimumSize(new Dimension(80,20));
		gen.setMaximumSize(new Dimension(80,30));
		gen.setFont(Constants.SUBLINES);
		gen.setHorizontalAlignment(SwingConstants.CENTER);
		
		return gen;
	}
```

dann füge ich das per panel.add(getLGenValue(String text), getGridBagConstraint(int x, int y)) in mein Panel ein.

Zur Laufzeit wird dann, wenn es zu viele Labels werden, so weit zusammengeschoben, dass sie nicht mehr lesbar sind...



Vielen Dank im Voraus!


----------



## jule (1. Jul 2007)

Hab noch versessen zu posten, wie mein Panel aussieht:


```
JPanel panel = new JPanel();
		panel.setSize(700,700); 
		panel.setPreferredSize(new Dimension(700,700));
		panel.setMinimumSize(new Dimension(700,700));
		panel.setMaximumSize(new Dimension(700,700));
		GridBagLayout gl = new GridBagLayout();
		gl.maximumLayoutSize(panel);
		gl.minimumLayoutSize(panel);
```


----------



## Beni (1. Jul 2007)

Ich geh mal davon aus, dass du das Panel korrekt in das JScrollPane gesetzt hast?

Dann fällt mir nur das ein: indem du beim "panel" die preferredSize setzt, sagst du dem Panel, dass es alle Werte von seinem Layout ignorieren soll. Indirekt sagst du damit auch dem JScrollPane, dass das Panel immer gleich gross sein soll.

Versuche die minimum/preferred/maximum-size so selten wie möglich von Hand zu setzen; denn es ist die Aufgabe der LayoutManager diese Grössen dynamisch zu berechnen.


----------



## jule (1. Jul 2007)

Hm, das hatte ich auch schon probiert. Dann verkleinert er das Panel insgesamt. Ich habe in meinem Container noch ein anderes Panel, das dann fast den gesamten Raum einnimmt, wenn ich dem betreffenden Panel nicht die Größen zuweise.
Vielleicht stimmt auch doch was beim hinzufügen des Panels in die Scrollpane nicht. Sieht bei mir so aus:


```
JScrollPane jsp = new JScrollPane(panel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
   	 	jsp.setSize(700,700);
   	 	cp.add(jsp,BorderLayout.WEST);
```


----------



## jule (2. Jul 2007)

Also ich habe jetzt rausgefunden, warum meine Scrollpane nicht anspringt. Du hattest recht, ich war so doof und habe die Maximumsize des Panels auf 700 gesetzt, dann macht er sie natürlich nicht größer. Allerdings musste ich, damit das Ganze greift die preferredsize rausnehmen. Und jetzt macht er mir je nach dem wie groß das Panel mit dem GridBagLayout ist das andere Panel ganz breit oder extrem schmal.


----------

