GridBagLayout Problem mit Buttons

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • GridBagLayout Problem mit Buttons

    Hallo zusammen,

    ich bin es nochmal. Aktuell arbeite ich an einer Art Medienverwaltung. Darin möchte ich Threads, Swing und Listener unterbringen (zum Üben), da ich diese für mein Abschlussprojekt (im Februar) brauche.
    Leider komme ich bereits bei der Oberfläche ins Stocken. Ich habe ein GridBagLayout mit 3 Spalten und 2 Zeilen.

    Quellcode

    1. public mediaFoundGUI(){
    2. initialize(); // Buttons deklarieren und ActionListener implementieren
    3. this.setTitle(WINDOW_NAME);
    4. this.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
    5. GridBagLayout gbl = new GridBagLayout();
    6. setLayout(gbl);
    7. GridBagConstraints gbc = new GridBagConstraints();
    8. gbc.fill = GridBagConstraints.HORIZONTAL;
    9. gbc.insets = new Insets(3, 3, 3, 3); // Abstände zwischen dem Fensterrand und den Elementen
    10. // Textarea für Ordnermenü
    11. ...
    12. // Textarea für Detailansicht
    13. ...
    14. // Button zum Öffnen der Datei
    15. gbc.gridx = 1;
    16. gbc.gridy = 1;
    17. gbc.gridwidth = 1;
    18. gbc.gridheight = 1;
    19. btnOpenFile.setPreferredSize(new Dimension(130, 30));
    20. gbl.setConstraints(btnOpenFile, gbc);
    21. add(btnOpenFile);
    22. // Button zum Öffnen des beinhaltenden Ordners
    23. gbc.gridx = 2;
    24. gbc.gridy = 1;
    25. gbc.gridwidth = 1;
    26. gbc.gridheight = 1;
    27. btnOpenPath.setPreferredSize(new Dimension(130, 30));
    28. gbl.setConstraints(btnOpenPath, gbc);
    29. add(btnOpenPath);
    30. //this.setLocationRelativeTo(null);
    31. this.setSize(800, 800);
    32. this.pack();
    33. this.setVisible(true);
    34. }
    Alles anzeigen


    Kann mir jemand dabei helfen, dass die Buttons gleichgroß werden? Aktuell is dabei nämlich der erste Button in der richtigen Größe und der zweite ist so breit wie die Spalte. ?(

    Danke, HellBunny.
  • Guten Morgen!

    Vermutlich liegt dein Problem in dieser Zeile:

    Quellcode

    1. gbc.fill = GridBagConstraints.HORIZONTAL;


    Das Problem ist, dass du deinen Buttons eine PreferredSize, also eine bevorzugte Größe gibst. Das sagt allerdings nicht, dass die Buttons nicht größer als die angegebene Größe sein dürfen. Es gibt das ganze auch mit setMaximumSize und setMinimumSize.
    Aufgrund des gbc.fill wird einfach der Zweite Button so weit vergößert, dass er den restlichen Platz voll ausfüllt.

    Ansonsten kann ich in deinem Quellcodeausschnitt nichts weiter finden. Solltest du damit nicht weiterkommen, poste doch bitte den kompletten GUI Quellcode. :)

    Liebe Grüße
    Bodo06
  • Okay danke. :D
    Da hatte ich gar nicht nach geguckt. Also, die Größe der Buttons ist nun genauso wie ich es wollte.

    Hast du noch eine Idee, wie ich sie "zentriert" kriege?
    Wenn ich das richtig verstehe, funktioniert das doch über GridBagConstraints.anchor und ist standardmäßig zentriert. Aber bei mir ist es das nicht. Oder habe ich da etwas falsch verstanden? :huh:

    Habe die Zeile übrigens so angepasst (der Rest bleibt wie gehabt)

    Quellcode

    1. gbc.fill = GridBagConstraints.NONE;
  • Vielen Dank! :thumbsup:
    Es war allerdings sogar noch einfacher... anchor wurde ignoriert, weil ich die Werte weightx und weighty nicht gesetzt hatte.

    Also es funktioniert wie folgt:

    Quellcode

    1. gbc.gridx = 1;
    2. gbc.gridy = 1;
    3. gbc.gridwidth = 1;
    4. gbc.gridheight = 1;
    5. gbc.weightx = 1;
    6. gbc.weighty = 0;
    7. btnOpenFile.setPreferredSize(new Dimension(130, 30));
    8. gbl.setConstraints(btnOpenFile, gbc);
    9. add(btnOpenFile);


    Das Ganze für beide Buttons und voilá! :D

    Nochmal Danke für deine schnelle Hilfe!
    HellBunny