# GridBagLayout Zellen verbinden



## CroweHammer (17. Mai 2010)

Sers Leute,

ich hab folgendes Problem bzw. ich möchte eine Struktur, die so aussieht:

```
...............................................
                       Titel
             JLabel         JTextfield
             JLabel         JTextfield
                              JButton
    ...............................................
```

Das Ganze wäre auch kein Problem, mit Ausnahme der ersten Zeile. Diese sollte in der Mitte sein, von den zwei Spalten die folgen.
Die erste Zeile müsste also über die gesamte Breite des Grids gehen, damit ich den Titel mittig setzen kann.
Weiß jemand Abhilfe?

Gruß CroweHammer


----------



## coree (17. Mai 2010)

Mit der GridBagConstraints Variable "gridwidth" kannst du zeilen über mehrere spalten erstrecken. in deinem fall dann wohl gridwidth = 2;

sollte dein problem denke ich mal lösen.


----------



## CroweHammer (17. Mai 2010)

wenn es so einfach gewesen wäre, hätte ich das schon gelöst. Dies scheint aber nur zu funktionieren, wenn eine Zeile darüber mehr Spalten enthält, als die, die man verbinden will. In dem Fall ist es aber die erste Zeile und dann scheint er diese Funktion nicht nutzen zu können.


----------



## coree (17. Mai 2010)

funktioniert auch bei der ersten zeite.
post halt mal den abschnitt im code


----------



## CroweHammer (17. Mai 2010)

```
this.setLayout(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();
        c.insets = new Insets(5, 0, 0, 5);

        this.info = new JLabel("Titel");
        this.add(this.info, c);
       
        this.username = new JLabel("Benutzername:");

        c.fill = GridBagConstraints.RELATIVE;
        c.anchor = GridBagConstraints.LINE_END;
        c.gridx = 0;
        c.gridy = 1;
        this.add(this.username, c);
        
        this.username_field = new JTextField();
        this.username_field.setPreferredSize(new Dimension(170, 25));

        c.fill = GridBagConstraints.RELATIVE;
        c.gridx = 1;
        c.gridy = 1;
        this.add(this.username_field, c);

        ...
```

this.add(); usw. <- bezieht sich natülrich auf mein JPanel.


----------



## coree (17. Mai 2010)

```
this.info = new JLabel("Titel");
        c.gridx = 0;
        c.gridy = 0;
        c.gridwidth = 2;
        this.add(this.info, c);
       
        this.username = new JLabel("Benutzername:");
 
        c.fill = GridBagConstraints.RELATIVE;
        c.anchor = GridBagConstraints.LINE_END;
        c.gridx = 0;
        c.gridy = 1;
        c.gridwidth = 1;
        this.add(this.username, c);
        
        this.username_field = new JTextField();
        this.username_field.setPreferredSize(new Dimension(170, 25));
 
        c.fill = GridBagConstraints.RELATIVE;
        c.gridx = 1;
        c.gridy = 1;
        this.add(this.username_field, c);
```

probiers mal so


----------



## CroweHammer (17. Mai 2010)

okay, danke. 
Ich hatte alles richtig nur in der Zeile darunter, musste ich zumindest eine Spalte mit gridwith="1" kennzeichnen, sonst geht es nicht.
Jetzt hab ich nur noch ein Problem und zwar liegt mein Grid jetzt genau in der Mitte meine JPanels, aber wie kann ich dieses innerhalb des JPanels positionieren?


----------



## Michael... (17. Mai 2010)

Was ist mit Positionieren gemeint? Für's Positionierung gibt's GridBagConstraints#anchor
Dein Problem ist aber vermutlich eher die Gewichtung.
Wenn ich mit nicht irre sind ist die Komponentengewichtung (weightx und weighty)  bei Verwendung des parameterlosen Konstruktors = 0. Spiel mal ein bisschen damit rum bzw. setze sie auf 1, dann ist zumindest mal das gesamte Panel gefüllt.


----------



## L-ectron-X (17. Mai 2010)

Mit Anker und Gewichten. (Doch, im Ernst! )

anchor und weightx bzw. weighty.

Mehr dazu auch in der FAQ: http://www.java-forum.org/bilder-gui-damit-zusammenhaengt/64702-gridbaglayout.html


----------



## CroweHammer (17. Mai 2010)

So sieht es im Moment aus:

```
------JPanel----------------
                                       

        -GridBagLayout-

        ---------------


----------------------------
```
und so sollte es aussehen:

```
------JPanel----------------                                     
        -GridBagLayout-

        ---------------




----------------------------
```
Ich bekomme, das mit anchor und weight nicht gelöst oder aber wurde meine Frage falsch verstanden?


----------



## L-ectron-X (17. Mai 2010)

Kannst du mal ein Bildschirmfoto posten,an dem du dein Problem darstellen kannst?


----------



## CroweHammer (17. Mai 2010)

ja hier. bitteschön.


----------



## L-ectron-X (17. Mai 2010)

Wenn ich dich jetzt richtig verstanden habe müsstest du in den GridBagConstraints für den Button schreiben:

```
c.anchor = GridBagConstraints.NORTH;
c.weighty = 1.0;
```

Dann sollten sämtliche Komponenten untereinander (so wie bisher) aber am oberen Rand des Panels positioniert werden.


----------



## CroweHammer (18. Mai 2010)

jow danke dir. Das war es wohl. Um noch einen Abstand vom oberen Rand zu bekommen, habe ich zusätzlich noch die Insets eingestellt.

Viele Grüße 

CroweHammer


----------

