LayoutManager GridBagLayout, probleme mit Anordnung von Objekten

jfordummies

Mitglied
Guten Abend!

Setze mich momentan mit Layout's auseinander, habe glaube ich jedoch einige Verständnisprobleme. Ich wollte eine eine Oberfläche erstellen mit den Labels "First Name:", "Last Name:", die untereinander stehen sollen und neben diesen entsprechend Textfelder. Das hat geklappt, jedoch wird alles in dem Frame zentriert. Ich hatte es so verstanden, dass gridx für das Vertikale und gridy für das Horizontale steht, und wenn man beides auf 0 setzt ein Objekt ganz oben Links platziert wird. Ist das falsch? Bzw. was müsste ich ändern damit es oben Links platziert wird? Außerdem wird bei mir bei einem Label nichts geändert wenn ich gridx um irgendwas erhöhe. Würde mich wirklich sehr über Hilfe freuen!

Hier der Code:

Java:
public class GUI {
  
  

    public static void main(String[] args) {
        GridBagConstraints c = new GridBagConstraints();
        c.gridx = 0;
        c.gridy = 0;
      
      
        JFrame myFrame = new JFrame();
        myFrame.setSize(500,500);
        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      
        JPanel meinPanel = new JPanel(new GridBagLayout());
        meinPanel.add(new JLabel("First Name: "), c);
        c.gridy ++;
      
        meinPanel.add(new JLabel("Last Name: "), c);
        c.gridx = 1;
        c.gridy = 0;
      
        meinPanel.add(new JTextField(8), c);
        c.gridy ++;
      
        meinPanel.add(new JTextField(8),c);
      
        myFrame.add(meinPanel);
        myFrame.setVisible(true);
        }

}
 
Um deine Labels auf die linke Seite zu bringen kannst du den anchor deiner GridBagContraints auf GridBagConstraints.WEST setzen.
Um die JTextFields zusätzlich noch auf die linke Seite zubringen kannst du weightx jeweils bei den JTextFields auf 1 setzen.
 
Anchor ist für die Positionierung eines Objektes innerhalb ihres entsprechenden Bereiches, richtig? Jedenfalls egal wie ich das ändere, die Positionen bleiben gleich. Die Ausgabe bei meinem jetzigen Code sieht aus wie im Anhang. Ich würde aber gerne alles zB. ganz oben Links haben und nicht mitten im Frame, wie mach ich das?
 

Anhänge

  • GUI.JPG
    GUI.JPG
    17,4 KB · Aufrufe: 25
Da ich das GridBagLayout soweit es geht versuche zu meiden kann ich dir jetzt nur ein Workaround zeigen.
Lass deine Constraints so wie sie sind und wrap das ganze in ein Panel mit einem FlowLayout als Layoutmanager.

In Code ausgedrückt würde das dann so aussehen:

Java:
...
JPanel contentPane = new JPanel(new FlowLayout(FlowLayout.LEFT));
...
contentPane.add(meinPanel);
frame.add(contentPane);
 
Bei einigen Projekten war es teilweise ein Krampf damit zuarbeiten.
Ich teil mir mein Layout lieber in mehrere Sub-Layouts ein die dann verschiedene Layoutmanager nutzen.
Ich würde aber nicht generell davon abraten - es kommt immer auf den Usecase drauf an 🙂
 

Zurück
Oben