Kurzübersicht
Mit dem Layoutmanager GridBagLayout lassen sich Graphische Komponenten tabellarisch darstellen. Der Unterschied zum GridLayout ist, daß die Komponenten über mehrere Spalten bzw. über mehrere Zeilen gehen können.
Zuständig für die Einteilung sind zwei Klassen: java.awt.GridBagLayout und java.awt.GridBagConstraints.
GridBagLayout definiert das eigentliche Layout und GridBagConstraints stellt die Objekte sowie deren Methoden zur Verfügung, die für die Aufteilung der Zeilen und Spalten dienen.
Constructor
GridBagLayout() | erzeugt ein GridBagLayout |
| |
GridBagConstraints() | erzeugt ein GridBagConstraints. Alle Felder haben die Standardeinstellungen. |
GridBagConstraints(int gridx, int gridy, int gridwidth, int gridheight, double weightx, double weighty, int anchor, int fill, Insets insets, int ipadx, int ipady) | GridBagConstraints mit gridx und gridx als Startpositionen, die weightx und weigthy-anteilige Breite von der gesamten Tabelle, anchor wenn die graphische Komponente schmäler als das angezeigte Feld ist, fill wenn es breiter ist, insets den Abstand der Komponenten untereinander, ipadx und ipady werden als Puffer zur Mindestgröße der graphischen Komponente links und rechts bzw. oben und unten hinzugefügt. Siehe Indexvariablen GridBagConstraints für genauere Beschreibung |
Indexvariablen
GridBagLayout |
|
MAXGRIDSIZE = 512 | größte Anzahl von Spalten und Zeilen. |
MINSIZE = 1 | kleinste Anzahl von Spalten und Zeilen. |
PREFERREDSIZE = 2 | Standardanzahl von Spalten und Zeilen. |
comptable | Tabelle, in der die graphischen Komponenten und die dazugehörigen GridBagConstraints gespeichert sind. |
defaultConstraints |
Enthält die Werte, die benutzt werden, wenn einer graphischen Komponente kein GridBagConstraints zugeordnet wird. Sie werden im Konstruktor auf die Standardwerte von GridBagConstraints gesetzt. |
layoutInfo |
Wird intern zur Speicherung der Werte des Layouts benutzt. |
columnWidths |
Breite der Spalten in Pixel |
rowHeights |
Höhe der Zeilen in Pixel |
columnWeights |
Gewichte der Spalten |
rowWeights |
Gewichte der Zeilen |
|
|
GridBagConstraints |
|
RELATIVE |
neue Zeile oder Spalte |
REMAINDER |
Weist der graphischen Komponente den Rest der aktuellen Spalte oder Zeile zu. |
NONE |
Größe der graphischen Komponente kann nicht verändert werden, um das Feld auszufüllen. (für fill) |
BOTH |
Graphische Komponente wird auf Breite und Höhe des Feldes vergrößert.(für fill) |
HORIZONTAL |
Graphische Komponente wird auf Breite des Feldes vergrößert.(für fill) |
VERTICAL |
Graphische Komponente wird auf Höhe des Feldes vergrößert. (für fill) |
CENTER |
Ausrichtung im Feld: zentriert (für anchor) |
NORTHEAST |
Ausrichtung oben rechts (für anchor) |
EAST |
Ausrichtung rechts (für anchor) |
SOUTHEAST |
Ausrichtung unten rechts (für anchor) |
SOUTH |
Ausrichtung unten (für anchor) |
SOUTHWEST |
Ausrichtung unten links (für anchor) |
WEST |
Ausrichtung links (für anchor) |
NORTHWEST |
Ausrichtung oben links (für anchor) |
gridx |
Anfangs-Spaltennummer für Feld |
gridy |
Anfangs-Zeilennummer für Feld |
gridwidth |
Breite des Feldes |
gridheight |
Höhe des Feldes |
weightx |
"Gewicht" der Spalte (für Platzaufteilung der Spalten) |
weighty |
"Gewicht" der Zeile (für Platzaufteilung der Zeilen) |
anchor |
Dieses Datenelement enthält eine der oben beschriebenen Konstanten (für anchor). Der Wert wird benutzt, wenn die graphische Komponente kleiner als das Feld ist. Standardwert: CENTER. |
fill |
legt fest, ob und wie die graphische Komponente vergrößert werden soll, wenn sie kleiner als das Feld ist. Standardwert: NONE. |
insets |
Abstand der graphischen Komponente zum Feld |
ipadx |
Wert wird zur Mindestgröße links und rechts der graphischen Komponente hinzugefügt |
ipady |
Wert wird zur Mindestgröße oben und unten der graphischen Komponente hinzugefügt |
|
Vererbung
java.lang.Object
|
+--java.awt.GridBagLayout
java.lang.Object
|
+--java.awt.GridBagConstraints
Beispiel
Programmbeispiel:
import java.awt.*;
import java.applet.*;
public class GridbagLayout1 extends Applet{
public void init() {
GridBagLayout gbl = new GridBagLayout();
this.setLayout(gbl);
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH; // wie Komponente Bereich füllen soll
c.weightx = 90; // Breite
c.weighty = 100; // Höhe
c.insets = new Insets(0,5,10,15); // Abstände definieren
Button but1 = new Button("Hallo");
Button but2 = new Button("Hallo2");
Button but3 = new Button("Hallo3");
Checkbox cb1 = new Checkbox("Checkbox 1");
TextField tf1 = new TextField("Textfeld 1");
c.gridx = 0; // x-Position
c.gridy = 0; // y-Position
c.gridwidth = 1; // Breite
c.gridheight = 2; // Höhe
gbl.setConstraints(but1, c); // zum GridBagConstraints hinzufügen
add(but1);
c.gridx = 1;
c.gridy = 0;
c.gridwidth = 3;
c.gridheight = 1;
gbl.setConstraints(but2, c);
add(but2);
c.gridx = 1;
c.gridy = 1;
c.gridwidth = 2;
c.gridheight = 1;
gbl.setConstraints(but3, c);
add(but3);
c.gridx = 3;
c.gridy = 1;
c.gridwidth = 1;
c.gridheight = 2;
gbl.setConstraints(tf1, c);
add(tf1);
c.gridx = 0;
c.gridy = 2;
c.gridwidth = 3;
c.gridheight = 1;
gbl.setConstraints(cb1, c);
add(cb1);
}
}
|
Bei einem GridBagLayout hat man einmal das Layout, das definiert, wie die Komponenten angeordnet werden.
Außerdem gibt es das GridBagConstraints, das die eingentliche Anordnung und Darstellung der Komponenten übernimmt.
Alle Einstellungen, die die Komponenten betreffen, werden also mit dem GridBagConstraints vorgenommen.
Zuerst sollte definiert werden, wie die Komponenten den Bereich, in dem sie ausgegeben werden füllen sollen c.fill = GridBagConstraints.BOTH;. Im Beisiel sollen die Komponenten so gestreckt werden, daß sie genau in den Bereich passen.
Damit wird ihre Größe, z.B. wie beim GridLayout an das Layout selbst angepaßt.
Über die Breite und Höhe wird die Gewichtung angegeben, wie der Kontainer angezeigt wird. c.weightx bzw. c.weighty
Außerdem können Sie die Abstände der Komponenten über c.insets untereinander.
Anschließend wurden die Komponenten definiert. Sie können nun ausgegeben werden.
Bei der Ausgabe muß jeder Bereich, in dem eine Komponente ausgegeben werden soll, separat festgelegt werden. Dafür benötigt man die x- und y-Position sowie die Breite und Höhe.
Danach wird die Komponente mit gbl.setConstraints(cb1, c); dem Layout zugewiesen. Angegeben werden muß der Name des Layouts gbl, der Name der Komponente cb1 und der Name des GridBagConstraints c.
Um die Komponente anzeigen zu können, muß sie zusätzlich mit add ausgegeben werden.