# GridBagLayout einfaches Beispiel geht nicht?



## planetenkiller (7. Nov 2007)

Hallo

Ich habe angefangen mich in das GridBagLayout einzuarbeiten. Ich wollte ein Einfaches Beispiel machen. Im moment sieht es so aus:

```
-----------------------
|   1    |   2  |    3|       
|---------------------|
|   x    |        4   |
|---------------------|
|          5          |
----------------------
```
Überall wo es eine Zahl steht, ist ein JButton. Da wo ein x steht ist nichts(Freiraum)
Ich will aber, das die Buttons 1 + 2 einer sind. Dass heisst, Button 2 soll weg, und Button 1 zwei Breit werden.
So:

```
-----------------------
|         1     |    3|       
|---------------------|
|   x    |        4   |
|---------------------|
|          5          |
----------------------
```
Doch wenn ich Button 2 Lösche und Button 1 zwei Breit mache, nutzt der Button 4 auch immer die Ganze Breite(Wie Button 5)?
Was mache ich Falsch?

Momentaner Code:

```
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

/**
 *
 * @author Roland Bär
 */
public class SimpleGridBagLayout 
{
    private JFrame mainFrame;
    
    private JButton button1;
    private JButton button2;
    private JButton button3;
    private JButton button4;
    private JButton button5;
    
    public SimpleGridBagLayout()
    {
        mainFrame = new JFrame("GridBagLayout Beispiel");
        button1 = new JButton("1");
        button2 = new JButton("2");
        button3 = new JButton("3");
        button4 = new JButton("4");
        button5 = new JButton("5");   
    }
    
    public void paint()
    {
        mainFrame.setLayout(new GridBagLayout());
        GridBagConstraints gbc;
        
        /***** Button 1 *****/
        gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.BOTH;
        gbc.gridx = 0;
        gbc.gridy = 0;
        //gbc.gridwidth = 2;
        gbc.weightx = 1.0;
        gbc.weighty = 1.0;
        mainFrame.add(button1, gbc);
        /***** Button 1 *****/
        /***** Button 2 *****/
        gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.BOTH;
        gbc.gridx = 1;
        gbc.gridy = 0;
        gbc.weightx = 1.0;
        gbc.weighty = 1.0;
        mainFrame.add(button2, gbc);
        /***** Button 2 *****/
        /***** Button 3 *****/
        gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.BOTH;
        gbc.gridx = 2;
        gbc.gridy = 0;
        gbc.weightx = 1.0;
        gbc.weighty = 1.0;
        mainFrame.add(button3, gbc);
        /***** Button 3 *****/

        /***** Button 4 *****/
        gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.BOTH;
        gbc.gridx = 1;
        gbc.gridy = 1;
        gbc.gridwidth = 2;
        gbc.weightx = 1.0;
        gbc.weighty = 1.0;
        mainFrame.add(button4, gbc);
        /***** Button 4 *****/
        
        /***** Button 5 *****/
        gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.BOTH;
        gbc.gridx = 0;
        gbc.gridy = 2;
        gbc.gridwidth = 3;
        gbc.weightx = 1.0;
        gbc.weighty = 1.0;
        mainFrame.add(button5, gbc);
        /***** Button 5 *****/
        
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainFrame.setSize(300, 150);
        mainFrame.setVisible(true);
    }
}
```


----------



## André Uhres (7. Nov 2007)

```
package layout;
/*
 * GridBagDemo.java
 */

import java.awt.*;
import javax.swing.*;

public class GridBagDemo extends JFrame {

    private JButton jButton1;
    private JButton jButton3;
    private JButton jButton4;
    private JButton jButton5;
    private JLabel jLabel1;
    private JLabel jLabel2;
    private JLabel jLabel3;
    private JPanel jPanel1;

    public GridBagDemo() {
        GridBagConstraints gridBagConstraints;
        jPanel1 = new JPanel();
        jButton1 = new JButton();
        jButton3 = new JButton();
        jButton4 = new JButton();
        jButton5 = new JButton();
        jLabel1 = new JLabel();
        jLabel2 = new JLabel();
        jLabel3 = new JLabel();
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        jPanel1.setLayout(new GridBagLayout());
        jButton1.setText("jButton1");
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
        gridBagConstraints.weightx = 2.0;
        gridBagConstraints.weighty = 1.0;
        jPanel1.add(jButton1, gridBagConstraints);
        jButton3.setText("jButton3");
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 2;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.weighty = 1.0;
        jPanel1.add(jButton3, gridBagConstraints);
        jButton4.setText("jButton4");
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 2;
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
        gridBagConstraints.weightx = 2.0;
        gridBagConstraints.weighty = 1.0;
        jPanel1.add(jButton4, gridBagConstraints);
        jButton5.setText("jButton5");
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 3;
        gridBagConstraints.gridwidth = 3;
        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
        gridBagConstraints.weightx = 3.0;
        gridBagConstraints.weighty = 1.0;
        jPanel1.add(jButton5, gridBagConstraints);
        
        //Diese folgenden 3 JLabels dienen lediglich als "Schablone"
        //um festzulegen, dass wir drei Spalten haben:
        jLabel1.setPreferredSize(new Dimension(100, 0));
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.weighty = 1.0;
        jPanel1.add(jLabel1, gridBagConstraints);
        jLabel2.setPreferredSize(new Dimension(100, 0));
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.weighty = 1.0;
        jPanel1.add(jLabel2, gridBagConstraints);
        jLabel3.setPreferredSize(new Dimension(100, 0));
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.weighty = 1.0;
        jPanel1.add(jLabel3, gridBagConstraints);
        
        
        getContentPane().add(jPanel1, BorderLayout.NORTH);
        setSize(400, 300);
        setLocationRelativeTo(null);
    }

    public static void main(String args[]) {
        new GridBagDemo().setVisible(true);
    }
}
```


----------



## planetenkiller (7. Nov 2007)

aha, ok. Nur durch die Drei JLabels werden es 3 Spalten. Geht das nicht auch ohne die drei JLabels? Bei einem Layout Manager, bei dem Komplexere Layouts möglich sind, erwarte ich, dass er selbst merkt, dass es 3 Spalten werden sollen.


----------



## André Uhres (7. Nov 2007)

planetenkiller hat gesagt.:
			
		

> aha, ok. Nur durch die Drei JLabels werden es 3 Spalten. Geht das nicht auch ohne die drei JLabels? Bei einem Layout Manager, bei dem Komplexere Layouts möglich sind, erwarte ich, dass er selbst merkt, dass es 3 Spalten werden sollen.


Deine Anordnung der Buttons ist schon recht ungewöhnlich. 
Die brauchen dann halt ne kleine Orientierungshilfe :wink:


----------



## planetenkiller (7. Nov 2007)

> Deine Anordnung der Buttons ist schon recht ungewöhnlich.


Soll nur ein Beispiel(für mitstudenten) sein, was mit dem GridBagLayout möglich ist.



> Die brauchen dann halt ne kleine Orientierungshilfe


Ok. Muss wohl eine Schlechte und zu einfache(  ) Anordnung der Köpfe sein, dass sie das brauchen.

Vielen Dank

mfg Planetenkiller


----------



## André Uhres (7. Nov 2007)

Du gehst zwar von drei Spalten aus, aber von der Optik her sind das ja nur zwei Spalten,
denn in keiner Zeile sind mehr als zwei Spalten.
Darüber hinaus haben die beiden ersten Zeilen auch noch unterschiedliche Spaltenbreiten
und die zweite Zeile hat nur eine Komponente aber das sollen zwei Spalten sein.
Für den relativ einfachen GridBagLayout ist das schon ziemlich feste Kost.
Man muss halt im Sinn behalten, dass ein GridBagLayout kein Freedesign ist :wink:


----------

