Wer mit Java GUIs erstellen will bekommt verschiedene GUI LayoutManager zur Unterstützung mitgeliefert. Diese bieten die Alternative zum Pixelgenauen positionieren. Ein sehr mächtiges Layout hierfür ist das GridBagLayout.
Beim GridBagLayout gibt man den Komponenten eine Position in einem Gitternetz und definiert über wieviele Gittereinheiten sie sich erstrecken soll.
Weitere Informationen zum GridBagLayout gibts bei Sun.
Ich habe nun mal eine Methode aus einem Tutorial aufgepeppt, um viele benötigte Parameter mit etwas weniger Tipparbeit zu setzen. Wem das zu viele Parameter sind, der kann die Methode ja einfach um die nicht benötigten Parameter kürzen.
/**
* Mit dieser Methode können Komponenten im
* Container angeordnet werden
*/
static void addComponent( Container cont,
GridBagLayout gbl,
Component c,
int x, int y,
int width, int height,
double weightx, double weighty,
int fill, int orientation,
int insertsTop, int insertsLeft,
int insertsBottom, int insertsRight)
{
GridBagConstraints gbc = new GridBagConstraints();
// In welche Richtung soll sich die Komponente ausdehnen?
gbc.fill = fill;
// In welche Richtung soll die Komponente ausgerichtet sein?
gbc.anchor = orientation;
// Bei welcher Gridnummer beginnt die Komponente
gbc.gridx = x; gbc.gridy = y;
// über wieviele Grids erstreckt sich diese Komponente
gbc.gridwidth = width; gbc.gridheight = height;
gbc.weightx = weightx; gbc.weighty = weighty;
// Margin werte für jede Komponente in Pixel
gbc.insets = new Insets(insertsTop, insertsLeft,
insertsBottom, insertsRight);
// Copntraints setzen
gbl.setConstraints( c, gbc );
// Komponenten hinzufügen
cont.add( c );
}
Ein Aufruf der Methode könnte dann wie folgt aussehen:
// Container, GBL Component x, y, w, h, wx, wy, filling of space, orientation of component, inserts (Top, Left, Bottom, Right)
addComponent(this.getJFrame(), gbl, textFeldLabel, 0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.NONE, GridBagConstraints.WEST, 30, 15, 0, 15);
addComponent(this.getJFrame(), gbl, textFeld, 1, 0, 3, 1, 1.0, 0.0, GridBagConstraints.HORIZONTAL, GridBagConstraints.WEST, 30, 0, 0, 15);
addComponent(this.getJFrame(), gbl, okButton, 2, 2, 1, 1, 1.0, 0.0, GridBagConstraints.NONE, GridBagConstraints.EAST, 20, 0, 5, 5);
addComponent(this.getJFrame(), gbl, abbrechenButton, 3, 2, 1, 1, 0.0, 0.0, GridBagConstraints.NONE, GridBagConstraints.EAST, 20, 0, 5, 15);
ein Kommentar »