/* B E S C H R E I B U N G
Es wird ein eigenes Fenster gebastelt und dieses mit einer Zeichenfläche
versehen.
An die Zeichenfläche werden verschiedene Buttons geklebt, die jeweils mit
einem GridBagConstraints (Einschränkung) versehen werden, d.h. dass z.B.
ein Button über mehrere Zeilen und Spalten gehen kann (siehe unten).
Die Zeichenfläche wird dann mit einem GridBagLayout "formatiert".



Layout:
+----------------------!---!
!                      ! 2 !
!..........1...........!---!
!                      ! 3 !
!----------------------!---!
!          4           .   !
!----------------------!---!
!          5           !   !
!----------------------! 7 !
!          6           !   !
+----------------------!---+

Das Layout besteht aus einer Tabelle mit 5 Zeilen und 2 Spalten,
wobei ein Element der Tabelle über mehrere Zeilen und Spalten gehen kann.

1)gridwidth, gridheight
Im oberen Beispiel geht
+----------+----------------+-----------------+
+ Element  + über gridwidth +    gridheight   +
+----------+----------------+-----------------+
+ Element1 + über 1 Spalten + und 2 Zeilen    +
+----------+----------------+-----------------+
+ Element2 + über 1 Spalten + und 1 Zeilen    +
+----------+----------------+-----------------+
+ Element3 + über 1 Spalten + und 1 Zeilen    +
+----------+----------------+-----------------+
+ Element4 + über 2 Spalten + und 1 Zeilen    +
+----------+----------------+-----------------+
+ Element5 + über 1 Spalten + und 1 Zeilen    +
+ ---------+----------------+-----------------+
+ Element6 + über 1 Spalten + und 1 Zeilen    +
+ ---------+----------------+-----------------+
+ Element7 + über 1 Spalten + und 2 Zeilen    +
+ ---------+----------------+-----------------+

2) gridx, gridy
Die x- und y- Koordinaten der Elemente:
Elementn (gritdx|gridy)
Element1 (0|0)
Element2 (1|0)
Element3 (1|1)
Element4 (0|2)
Element5 (0|3)
Element6 (0|4)
Element7 (1|3)

3) weightx, weighty
a) Wenn alle Komponenten (z.B. Buttons) den Wert weightx-Wert 0 haben,
so wird eventuell anfallender Freiraum (falls die Buttons alle recht
klein sind), rechts und links eingefügt.

b) Wenn genau eine Komponente den weightx-Wert 0 hat, so wird genau nur
diesem einen Element eventuell anfallender Freiraun zugewiesen.

c) Ansonsten gibt der Wert an ,wieviel (relativ) Platz des Freiraums
verwendet wird.

d) Analoges gilt für weighty

*/

package gridbaglayout1;
import java.awt.*;
import javax.swing.*;
import java.util.*;


public class MainGridBagLayout1 {
    public static void main(String[] args) {
        int l=1000;
        int b = 700;
        MyZeichenflaeche myZ = new MyZeichenflaeche();
        JFrame f = new JFrame();
        f.setSize(l, b);
        f.getContentPane().add(myZ);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
  }
}

class MyZeichenflaeche extends JPanel{

    public MyZeichenflaeche(){
        Container myCont;
        GridBagLayout gbl;
        JButton myb1, myb2, myb3, myb4, myb5, myb6, myb7;
        gbl = new GridBagLayout();
		myb1=new JButton("B1");
		myb2=new JButton("B2");
		myb3=new JButton("B3");
		myb4=new JButton("B4");
		myb5=new JButton("B5");
		myb6=new JButton("B6");
		myb7=new JButton("B7");


//        JButton jb = new JButton();
//        jb.setPreferredSize(new Dimension());
//        addiereKopmonente(gbl, jb, 0, 0, 2, 5, 1, 1);
//        addiereKopmonente(gbl, new JLabel(), 0, 0, 2, 5, 1, 1);
        addiereKopmonente(gbl, myb1, 0, 0, 1, 2, 1, 1);
        // weightx = 3 bedeutet, dass Buttom myb1 dreimal so breit ist
        // wie myb1
        addiereKopmonente(gbl, myb2, 1, 0, 1, 1, 3, 1);
        addiereKopmonente(gbl, myb3, 1, 1, 1, 1, 1, 1);
        addiereKopmonente(gbl, myb4, 0, 2, 2, 1, 1, 1);
        addiereKopmonente(gbl, myb5, 0, 3, 1, 1, 1, 1);
        addiereKopmonente(gbl, myb6, 0, 4, 1, 1, 1, 1);
        addiereKopmonente(gbl, myb7, 1, 3, 1, 2, 1, 1);


        setLayout(gbl);
    }


    public void addiereKopmonente(GridBagLayout gbl, Component c, int x, int y, int width, int height, double weightx, double weighty){
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.BOTH;
        gbc.gridx = x;
        gbc.gridy = y;
        gbc.gridwidth = width;
        gbc.gridheight = height;
        gbc.weightx = weightx;
        gbc.weighty = weighty;
        // Beschränkung für Komponente c (z.B. Button)am Layout-Manager anmelden.
        gbl.setConstraints(c, gbc);
        add(c);
    }

    public void paintComponent(Graphics g){
        g.drawOval(10, 10, 100, 100);

    }
}














