# GridBagLayout in JPanel: Wie stelle ich es an das Komponenten im JPanel ...



## mungoparks (22. März 2004)

Hallo @ all, 

kurz vorneweg, ich habe alles zum Thema GridBagLayout hier im Forum gelesen das die Suchfunktion ausgeworfen hat. Leider 
hat es meine Frage nicht gelöst. 
Meine Frage bezüglich des GridBagLayout's(GBL) ist wie stelle ich es an das das GBL in einem JPanel 
auch in der linken oberen Ecke des JPanels "beginnt" und nicht in der Mitte des JPanels. 

Wenn ich z.B das GBL direkt an den Container gcp = getContentPane(); zuweise funktioniert es . 
Aber mein Container muss ein CardLayout haben und eine dieser Karten enthält einen JPanel mit BorderLayout. 
Im "North" diese JPanels ist ein weiterer JPanel mit GBL in dem verschieden Komponenten plaziert sind. 
Das einzige Problem ist , das wie oben erwähnt diese KOmponeten nicht ab der oberen linken Ecke plaziert 
werden, sondern "mittig".. Das GBL stimmt aber soweit d.h Die Komponenten sind im Verhältnis richtig angeordent 
nur halt nicht ab der linken oberen Ecke des JPanel. 
Wie kann ich es anstellen , das die Komponenten im JPanel 
auch ab dem oberen linken Eck angeordnet werden wie 
wenn ich sie direkt an dem Container gcp anbringe ? 

Hoffe jemand hier weiss Rat. 
Danke für alle Hinweise. Greetz


----------



## Thomas Darimont (22. März 2004)

Hallo!

Mal ganz schnell und naiv... schieb doch einfach noch ein oder zwei "leere" ausreichend große JPanels als "Positionierungshilfe" in das JPanel mit dem GBL... 

Gruß Tom


----------



## mungoparks (22. März 2004)

Hi Tom, 

sorry, aber ich verstehe deinen Gedankengang nicht .
 
Was bringt das?  Blicke die Idee dahinter nicht.
Kann es leider erst heute Abend ausprobieren , da ich
gerade Arbeiten soll. Melde mich später.

Danke für deinen Ansatz.
greetz

..Hi Tom , 

habe gerade ein mini Beispiel hier gebastelt , 
jetzt verstehe ich was du meinst. bin nicht sicher ob es 
für meine Applikation funktioniert, aber im "kleinen" siehts gut aus.
HERZLICHEN DANK 

gruß
ivan


----------



## Supermario (5. Mai 2007)

hey, kannst du mal bitte dein mini beispiel hier posten? - würde mich auch interessieren. Bzw. gibt es keine andere Möglichkeit, mit der man den Ursprung vom GBL in einem Panel nach oben links verlagern kann?

gruß


----------



## Billie (5. Mai 2007)

Hast du denn das Anchor Attribut gesetzt?


```
GridBagConstraints c = new GridBagConstraints();
c.anchor = GridBagConstraints.WEST;
```


----------



## Supermario (5. Mai 2007)

hmm auch wenn ich anchor setze, wird alles in der Mitte des JPanels angezeigt ...


----------



## Supermario (6. Mai 2007)

hier mal ein code Beispiel


```
// private JPanel currentPanel;   
// Methoden, die zuvor via ActionListener aufgerufen wurden:
// this.remove(currentPanel);            
// this.add(currentPanel = new Einstellungen());

public Einstellungen()
{   
			//Komponenten
			JLabel header = new JLabel("Trainer Einstellungen");
			JLabel vname = new JLabel("Vorname: ");
			
			JTextField fvname = new JTextField();
			
			
			this.setBorder(javax.swing.BorderFactory.createTitledBorder("Einstellungen"));          
			this.setSize(new Dimension(640, 480));
			
			GridBagConstraints c = new GridBagConstraints();
			this.setLayout(new GridBagLayout());

			c.gridwidth = GridBagConstraints.REMAINDER;
			c.gridheight = 2;
			c.insets = new Insets(0, 5, 0, 5);
			add(header, c);
			
			c.gridwidth = GridBagConstraints.RELATIVE;
			c.gridheight = 1;
			c.anchor = GridBagConstraints.WEST;
			add(vname, c);
			c.gridwidth = GridBagConstraints.REMAINDER;
			c.fill = GridBagConstraints.HORIZONTAL;
			add(fvname, c);
}
```

und immer steht es in der mitte  - warum?


----------



## haintje (16. Mai 2007)

Hallo,

falls das Problem noch besteht, versuch mal das:


```
c.gridx=0;
			c.gridy=0;
			c.gridwidth = 2;
			c.gridheight = 1;
			c.weightx=0;
			c.weighty=0;
			c.fill = GridBagConstraints.HORIZONTAL;
			c.anchor = GridBagConstraints.NORTHWEST;
			c.insets = new Insets(0, 5, 0, 5);
			add(header, c);
			
			c.gridx=0;
			c.gridy=1;
			c.gridwidth = 1;
			c.gridheight = 1;
		       c.weightx=0;
			c.weighty=1;
			c.fill = GridBagConstraints.HORIZONTAL;
			c.anchor = GridBagConstraints.NORTHWEST;
			add(vname, c);

			
			c.gridx=1;
			c.gridy=1;
		        c.gridwidth = 1;
			c.gridheight = 1;
		        c.weightx=1;
			c.weighty=1;
			c.anchor = GridBagConstraints.NORTHWEST;
			c.fill = GridBagConstraints.HORIZONTAL;
			add(fvname, c);
```

Du musst immer die anteilige Weite (weightx oder weighty) der Komponenten angeben. Sonst wird der nichtgenutzte Platz gleichmäßig auf die Ränder des Panels verteilt und deine Komponenten in die Mitte des Panels gedrückt. (siehe auch http://java.sun.com/docs/books/tutorial/uiswing/layout/gridbag.html)

Gruß

Antje


----------

