GridBagLayout Zellen verbinden

CroweHammer

Bekanntes Mitglied
Sers Leute,

ich hab folgendes Problem bzw. ich möchte eine Struktur, die so aussieht:
Code:
    ...............................................
                       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
 
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.
 
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.
 
Java:
        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.
 
Java:
        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
 
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?
 
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.
 
So sieht es im Moment aus:
Java:
------JPanel----------------
                                       

        -GridBagLayout-

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


----------------------------
und so sollte es aussehen:
Java:
------JPanel----------------                                     
        -GridBagLayout-

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




----------------------------
Ich bekomme, das mit anchor und weight nicht gelöst oder aber wurde meine Frage falsch verstanden?
 
Wenn ich dich jetzt richtig verstanden habe müsstest du in den GridBagConstraints für den Button schreiben:
Java:
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.
 
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
 

Neue Themen


Zurück
Oben