GridLayout



  • Hallo,

    kann mir jemand sagen ob man die Spaltenbreite bei einem GridLayout verändern kann und wenn ja wie?

    Danke



  • Meines Wissens nach nicht. Wenn du variable Breiten willst, solltest du das GridBagLayout verwenden.

    /Dirk



  • Ich versuche gerade zu verstehen wie das GridBagLayout arbeitet. Kann es sein das das ganz schön kompliziert ist. Ich verstehe absolut nicht wie man damit arbeitet.

    Eigentlich will ich auf einem Panel nur folgendes anzeigen:

    Label1 ComboBox1
    Label2 ComboBox2
    Label3 ComboBox3

    Wenn es geht sollen die ComboBoxen sich immer an die Fenstergrösse anpassen und die Labels nur so viel Platz einnehmen wie nötig.

    Ich hoffe ihr versteht was ich meine.



  • Kann es sein das das ganz schön kompliziert ist

    Für dein Layout solltest du ein GridBagLayout nehmen.
    Befasse dich erstmal ausgiebig mit dem GridBagLayout. http://java.sun.com/docs/books/tutorial/uiswing/layout/gridbag.html
    Mit Google findest du zig weitere Tutorials.

    Dass sich die ComboBoxes der Fenstergröße anpassen und die Labels nicht schaffst du ganz einfach mit der Variablen "fill" deiner GridBagConstraints Instanz.

    flo



  • Ich komme einfach nicht drauf wie das gehen soll. Habe mir schon mehrere Anleitungen angeschaut aber ich bin wohl zu blöd. Hier mal ein Test. Die Sachen die ich schon ausprobiert habe, die aber keine Wirkung hatten, habe ich weg gelassen.

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class test extends JFrame {
      // Anfang Variablen
      String array[] = {"Test", "Test2", "Test3"};
      JPanel panel = new JPanel();
      JLabel Label1 = new JLabel("Label1");
      JLabel Label2 = new JLabel("Label2");
      JComboBox ComboBox1 = new JComboBox(array);
      JComboBox ComboBox2 = new JComboBox(array);
      // Ende Variablen
    
      public test (String title) {
        // Frame-Initialisierung
        super (title);
        addWindowListener(new WindowAdapter() {
          public void windowClosing (WindowEvent evt) {System.exit(0);}});
        setSize(500, 500);
        Container cp = getContentPane();
        cp.setLayout(new BorderLayout());
    
        // Anfang Komponenten
        getContentPane().add(panel, BorderLayout.NORTH);
    
        GridBagLayout gbl = new GridBagLayout();
        panel.setLayout(gbl);
    
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.insets = new Insets(5, 5, 5, 5);  // Abstand zwischen den Zellen
        gbc.fill = GridBagConstraints.HORIZONTAL; // Macht die Komponente breit genug um die Zelle(n) auszufüllen
    
        gbc.gridx = 0;  // Von Zelle 0,0 um 1,1 erweitern
        gbc.gridy = 0;
        gbc.gridwidth = 1;
        gbc.gridheight = 1;
        gbl.setConstraints(Label1, gbc);
        panel.add(Label1);
    
        gbc.gridx = 1; //Von Zelle 1,0 um 3,1 erweitern
        gbc.gridy = 0;
        gbc.gridwidth = 3;
        gbc.gridheight = 1;
        gbl.setConstraints(ComboBox1, gbc);
        panel.add(ComboBox1);
    
        gbc.gridx = 0; // Von Zelle 0,1 um 1,1 erweitern
        gbc.gridy = 1;
        gbc.gridwidth = 1;
        gbc.gridheight = 1;
        gbl.setConstraints(Label2, gbc);
        panel.add(Label2);
    
        gbc.gridx = 1; // Von Zelle 1,1 um 3,1 erweitern
        gbc.gridy = 1;
        gbc.gridwidth = 3;
        gbc.gridheight = 1;
        gbl.setConstraints(ComboBox2, gbc);
        panel.add(ComboBox2);
    
        // Ende Komponenten
    
        setVisible(true);
      }
    
      // Anfang Ereignisprozeduren
      // Ende Ereignisprozeduren
    
      public static void main (String[] args) {
        new test("test");
      }
    }
    


  • Danke für eure Hilfe. Ich hatte gerade noch ein kleines Erfolgserlebnis. Es funktioniert jetzt. Und wehe es tritt doch noch ein Problem auf..... 🙂


Anmelden zum Antworten