# GridBagLayout - links oben beginnen.



## peppermint (24. Mai 2007)

Hi, 
folgendes Szenario:

Ich habe ein JPanel mit BorderLayout, auf dem mit folgender Verteilung weiter JPanels liegen:
---------------------------------------------------------------------------
 |Panel1 West | Panel 2 Center | Panel 3 East |
 ------------------------------------------------------------------------
 |Panel 4 South                                                 |
 ---------------------------------------------------------------------------

Mein Problem ist nun folgendes:
Panel 1 hat GridBagLayout, dort hab ich mehrere JLabel und JTextFields, allerdings ordnet mir Java die
Dinger immer in der Mitte an (von oben und unten her gesehen), da auf dem Panel 2 (ebenfalls GridBagLayout) 
bedeutend mehr drauf ist. (Ich fang immer mit gridx = 0 und gridy = 0 an, an dem liegts also net...)

Da auf Panel1 nur 3 Zeilen des GridBagLayout gefüllt sind, auf Panel2 aber 7, legt Java mir die Elemente in Panel1 mittig...:roll: 
(Ich hoff ihr wisst, wa ich mein)

Wie schaff ich es, dass Panel 1 auch von oben her gefüllt wird.

Das erste Element auf Panel 1 adde ich mit:


```
addComponent(this, gbl, lDescription , 0, 0, 3, 1, GridBagConstraints.CENTER, default_insets, 0, 0, GridBagConstraints.BOTH);
.
.
.
protected void addComponent(Container cont, GridBagLayout gbl,

			JComponent comp, int x, int y, int width, int height, int anchor,

			Insets in, double wx, double wy, int fill) {

		GridBagConstraints c = new GridBagConstraints();

		c.weightx = wx;

		c.weighty = wy;

		c.fill = fill;

		c.gridx = x;

		c.gridy = y;

		c.gridwidth = width;

		c.gridheight = height;

		c.insets = in;

		c.anchor = anchor;

		gbl.setConstraints(comp, c);

		cont.add(comp);

	}
```

Hab ich nur irgendwo nen Denkfehler drinn...?


----------



## MasterEvil (24. Mai 2007)

So richtig hab ichs nich verstanden aber in deinem Code Beispiel muss es ja mittig sein wenn du anchor = Center hast!

Mach mal nen kleines JPanel als Beispiel mit nem Label ?!


----------



## peppermint (25. Mai 2007)

Ok, hier mal ein kleines Beispiel...

Bei der Höhe des gesamten Fensters möchte ich gerne, dass label1 vom RightPanel nicht mittig angezeigt wird, sonder gnaz oben links...


```
import java.awt.BorderLayout;

import javax.swing.JFrame;

public class MainPanel extends JFrame {
	
	public MainPanel() {
		this.setLayout(new BorderLayout());
		
		this.setBounds(10, 10, 250, 450);
		
		this.add(new RightPanel(), BorderLayout.WEST);
		
		this.setVisible(true);
		
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new MainPanel();

	}

}
```


```
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class RightPanel extends JPanel {
	
	private GridBagLayout gbl = new GridBagLayout();
	private Insets default_insets = new Insets(5, 5, 5, 5);
	
	private JLabel label1 = new JLabel("Test");
	
	
	public RightPanel() {
		addComponent(this, gbl, label1	, 0, 0, 3, 1, GridBagConstraints.PAGE_START, default_insets, 0, 0, GridBagConstraints.NONE);
		
		this.setLayout(gbl);
	}
	
	protected void addComponent(Container cont, GridBagLayout gbl,
			JComponent comp, int x, int y, int width, int height, int anchor,
			Insets in, double wx, double wy, int fill) {
		GridBagConstraints c = new GridBagConstraints();

		c.weightx = wx;
		c.weighty = wy;
		c.fill = fill;
		c.gridx = x;
		c.gridy = y;
		c.gridwidth = width;
		c.gridheight = height;
		c.insets = in;
		c.anchor = anchor;

		gbl.setConstraints(comp, c);
		cont.add(comp);
	}

}
```

Ich hoff so wirds deutlicher... :roll:


----------



## André Uhres (25. Mai 2007)

```
addComponent(this, gbl, label1   , 0, 0, 3, 1, 
                GridBagConstraints.PAGE_START, default_insets, 3, 1, GridBagConstraints.NONE);
```


----------



## peppermint (25. Mai 2007)

OK, danke schon mal... daran scheints wohl gelegen zu ham   

Wär nett, wenn du mir die Funktionalität von weightx und weighty vielleicht noch etwas näher bringen könntest.
Habs grad zwar selbst in der Api nachgelesen  :### aber so ganz schlau bin ich noch nicht...
Wie muss ich denn genau mit den Werten spielen, da ich in meinen Orginal-Prog ja ca. 20 Komponenten drauf hab...
So halbwegs passt es da jetzt schon, aber eben noch nicht ganz. So richtig schön von oben her füllt Java mir das Panel
mit mehr als einer Komponente nüsch  :?:


----------



## André Uhres (25. Mai 2007)

Ich setz gewöhnlich weightx=width und weighty=height, 
dann braucht man keine komplizierten Berechnungen anzustellen, 
um das relative Gewicht einer Komponente zu bestimmen.


----------



## peppermint (25. Mai 2007)

Ok, danke für die Antwort.   :toll:  

Jetzt sieht meine GUI zumindest etwas besser aus. Noch nicht 100% so, wie ich das will, aber fürs erste OK.
Kann ja mit den Werten noch n bisschen spielen.


----------

