Dies ist eine alte Version des Dokuments!
GridBagLayout
Again and again you hear that the GridBagLayout is so complicated. It is really very extensive, but as a general rule you only need a few methods.
The GridBagLayout works fundamentally with a thought grid. Each array in this grid can be addressed by its position (x,y).
To define the size of the grid, you can outline the desired layout on a piece of paper.
With the class GridBagConstraints, the qualities of a single element are determined.
Beispiel
Der gewünschte Dialog:
Das dahinter liegende Gitter:
0,0 | 1,0 |
0,1 | 1,1 |
Die Liste auf der linken Seite belegt also die beiden Gitterfelder 0,0 und 0,1.
Die Höhe der Liste beträgt somit „2“. Um einem Control (hier der Liste) die Positions- und Größenangaben zuzuordnen, wird die Klasse GridBagConstraints verwendet.
Der dazugehörige Source sieht so aus:
package com.sowas.javademo.awt; import java.awt.*; import java.awt.event.*; public class GridBagLayoutDemo extends Frame implements ActionListener { Button btClose; public GridBagLayoutDemo(){ super("GridBagLayoutDemo"); GridBagLayout gbl=new GridBagLayout(); setLayout(gbl); GridBagConstraints gbc=new GridBagConstraints(); // Festlegen, dass die GUI-Elemente die Gitterfelder in // waagerechter Richtung ausfüllen: gbc.fill=GridBagConstraints.HORIZONTAL; // Die Abstände der einzelnen GUI-Elemente zu den gedachten // Gitterlinien festgelegen: gbc.insets = new Insets(2,2,2,2); gbc.gridx = 0; // x-Position im gedachten Gitter gbc.gridy = 0; // y-Position im gedachten Gitter gbc.gridheight = 2; // zwei Gitter-Felder hoch List list = new List(3); gbl.setConstraints(list, gbc); add(list); gbc.gridx=1; gbc.gridy=0; gbc.gridheight = 1; Label label = new Label("Nur eine Demo"); gbl.setConstraints(label, gbc); add(label); gbc.gridx=1; gbc.gridy=1; gbc.gridheight = 1; btClose = new Button("Schließen"); btClose.addActionListener(this); gbl.setConstraints(btClose, gbc); add(btClose); pack(); } public void actionPerformed(ActionEvent e){ if (e.getSource() == btClose) dispose(); } public static void main(String[] args){ GridBagLayoutDemo demo = new GridBagLayoutDemo(); demo.setVisible(true); } }
Natürlich hat das GridBagLayout noch mehr Möglichkeiten. Häufig verwendet werden auch noch die GridBagConstraints-Parameter
weightx
und
weighty
. Diese können Werte zwischen 0.0 und 1.0 einnehmen und geben an, wie der verbleibende Freiraum aufgeteilt wird. Beispiel: Ein Dialog habe eine verfügbare Breite von 600 Pixeln. In diesem Dialog seien zwei Elemente A und B angeordnet. Dabei habe Element A ein minimalen Platzbedarf von 300 Pixeln und Element B einen minimalen Platzbedarf von 100 Pixeln. Damit bleiben 200 Pixel über. Diese werden im Verhältnis der beiden Werte für weightx aufgeteilt. Angenommen Element A habe ein weightx von 0.75 und Element B ein weigtx von 0.25, so wird das Gitterfeld für A eine Breite von 450 Pixeln (300+0.75*200) und Gitterfeld B eine Breite von 150 (100+0.25*200) Pixeln erhalten.
Wird ergänzt…