GridBagLayout



  • Hi,

    ich hänge gerade an einem eigentlich einfachen Problem. Ich will ein Applet in 2 Panels unterteilen, wobei das 1. Panel 1/10 der gesamten Höhe einnehmen soll und über die gesamte Breite gehen soll. Das 2. Panel soll den restlichen Platz einnehmen (also 9/10 der Gesamthöhe)

    Allerdings liefert der folgende Code bei mir nur Mist:

    public class Funktionsplotter2D extends Applet {
        private TextField function;
    
        public void init() {
            Panel header = new Panel();
            header.setBackground(Color.black);
    
            GridBagLayout gbl = new GridBagLayout();
            setLayout(gbl);
            GridBagConstraints gbc;
            gbc = new GridBagConstraints();
            gbc.gridx = 0;
            gbc.gridy = 0;
            gbc.gridwidth = 1;
            gbc.gridheight = 1;
            gbc.weightx = 1.0;
            gbc.weighty = 1.0;
            gbc.fill = GridBagConstraints.HORIZONTAL;
            add(header, gbc);
    
            Panel main = new Panel();
            main.setBackground(Color.BLUE);
    
            gbc = new GridBagConstraints();
            gbc.gridx = 0;
            gbc.gridy = 1;
            gbc.gridwidth = 1;
            gbc.gridheight = 9;
            gbc.weightx = 1.0;
            gbc.weighty = 1.0;
            gbc.fill = GridBagConstraints.BOTH;
            add(main, gbc);
        }
    }
    

    Weiß irgend jemand Rat???
    Danke



  • Weiß denn niemand Rat??? Ich verzweifle noch an dem Problem :((



  • Schwaches Javaforum hier!


  • Mod

    Du hast das GridBagLayout nicht verstanden. Du kannst bei dem Layout zwar angeben, wieviele Felder eine Komponente horizontal und vertikal besetzen soll, du kannst aber nicht angeben, welche Größe diese Felder haben. Die Größe der Felder ist i.A. unterschiedlich. Das GridBagLayout berechnet sich die Größen der Felder anhand der Größen der Komponenten, die darauf liegen, selber.



  • Gregor schrieb:

    Du hast das GridBagLayout nicht verstanden. Du kannst bei dem Layout zwar angeben, wieviele Felder eine Komponente horizontal und vertikal besetzen soll, du kannst aber nicht angeben, welche Größe diese Felder haben. Die Größe der Felder ist i.A. unterschiedlich. Das GridBagLayout berechnet sich die Größen der Felder anhand der Größen der Komponenten, die darauf liegen, selber.

    Das ist nicht richtig. Das GridBagLayout verwendet immer den vollen zur Verfügung stehenden Platz. Die Größe der Zellen kann man durch Verschmelzen von Zeilen oder Spalten verändern.


  • Mod

    argh schrieb:

    Gregor schrieb:

    Du hast das GridBagLayout nicht verstanden. Du kannst bei dem Layout zwar angeben, wieviele Felder eine Komponente horizontal und vertikal besetzen soll, du kannst aber nicht angeben, welche Größe diese Felder haben. Die Größe der Felder ist i.A. unterschiedlich. Das GridBagLayout berechnet sich die Größen der Felder anhand der Größen der Komponenten, die darauf liegen, selber.

    Das ist nicht richtig. Das GridBagLayout verwendet immer den vollen zur Verfügung stehenden Platz. Die Größe der Zellen kann man durch Verschmelzen von Zeilen oder Spalten verändern.

    Ja, du wirst es besser als ich wissen. 🙂 Komisch nur, dass du hier seit einer Woche ein Problem damit hast und nicht ich. Du hast da eine hübsche Aussage hingeschrieben, die allerdings nahezu garnichts mit deinem speziellen Problem zu tun hat. Verstehst du eigentlich, wie der 2. Teil davon gemeint ist (ich gehe gerade davon aus, dass du das irgendwo abgeschrieben hast)? Ich denke nicht.

    Wenn du in deinem speziellen Fall haben möchtest, dass eine Komponente den neunfachen Platz der anderen Komponente einnimmt, dann mußt du das über die Größen der Komponenten regeln.

    ...also mit setPreferredSize, setMinimumSize usw.


  • Mod

    Ich habe dir mal etwas Code geschrieben, der eine Lösung für dein lächerliches Problem darstellt:

    import java.awt.*;
    import javax.swing.*;
    
    public class TestGridBagLayout
    {
       public static void main (String [] args)
       {
          JFrame frame = new JFrame("TestGridBagLayout");
          JPanel panelOne = new JPanel();
          panelOne.setBorder(BorderFactory.createTitledBorder("1/10"));
          panelOne.setPreferredSize(new Dimension(200,30));
          JPanel panelTwo = new JPanel ();
          panelTwo.setBorder(BorderFactory.createTitledBorder("9/10"));
          panelTwo.setPreferredSize(new Dimension(200,270));
    
          GridBagLayout gBL = new GridBagLayout();
          gBL.setConstraints(panelOne,new GridBagConstraints(0,0,1,1,1.0,1.0,
                                                             GridBagConstraints.CENTER,
                                                             GridBagConstraints.BOTH,
                                                             new Insets(0,0,0,0),0,0));
          gBL.setConstraints(panelTwo,new GridBagConstraints(0,1,1,1,1.0,9.0,
                                                             GridBagConstraints.CENTER,
                                                             GridBagConstraints.BOTH,
                                                             new Insets(0,0,0,0),0,0));
          frame.getContentPane().setLayout(gBL);
          frame.getContentPane().add(panelOne);
          frame.getContentPane().add(panelTwo);
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.setSize(400,500);
          frame.setVisible(true);
       }
    }
    

  • Mod

    argh schrieb:

    Schwaches Javaforum hier!

    BTW: Schwache Eigeninitiative von dir. Wenn du etwas mit dem GridBagLayout herumgespielt hättest, dann hättest du in kürzester Zeit eine Lösung für dein Problem gefunden.


Anmelden zum Antworten