LayoutManager


Anordnen von Elementen

Grafische Elemente werden nicht direkt auf einen Frame aufgebracht, sondern auf einen LayoutManager, der mit dem Frame verbunden ist. Das Layout wird bestimmt mit dem Befehl
setLayout()

Der LayoutManager regelt Anordnung und Ausrichtung von Elementen. Einige typische Layout-Manager werden nun im Beispiel vorgestellt:

FlowLayout

Das FlowLayout ordnet die Elemente automatisch an, so wie gerade Platz ist. Beispiel:

package gui.layout;

import java.awt.*;

public class FlowDemo extends Frame
{
    Button button1 = new Button( "Rot" );
    Button button2 = new Button( "Gelb" );
    Button button3 = new Button( "Grün" );
    Button button4 = new Button( "Blau" );

    public FlowDemo()
    {
        super( "Frame mit Flowlayout" );

        setLayout( new FlowLayout());
        add( button1 );
        add( button2 );
        add( button3 );
        add( button4 );

        setBackground( Color.black );
    }
    public static void main( String a [] )
    {
        FlowDemo fl = new FlowDemo();
        fl.setSize( 423, 234 );
        fl.show();
    }
}

Man beachte, dass hier ein Package-Verzeichnis als Unterverzeichnis eines anderen benutzt wird. Kompilieren und Aufrufen:

C:\>javac gui/layout/FlowDemo.java
C:\>java  gui.layout.FlowDemo

Übung:

Man kompiliere das Programm FlowDemo im package gui.layout Man teste das Fenster. Man beobachte das FlowLayout, indem man das Fenster mit der Maus ganz schmal zusammenschiebt. Man ergänze die fehlenden Listener.

GridLayout

Das GridLayout erzeugt ein Gitter, in welches die Elemente eingefügt werden; dabei wird immer der ganze Platz im Frame ausgenutzt. Beispiel:

package gui.layout;

import java.awt.*;

public class GridDemo extends Frame
{
    Button button1 = new Button( "Rot" );
    Button button2 = new Button( "Gelb" );
    Button button3 = new Button( "Grün" );
    Button button4 = new Button( "Blau" );
    Button button5 = new Button( "Schwarz" );
    Button button6 = new Button( "Weiss" );

    public GridDemo()
    {
        super( "Frame mit Gridlayout" );

        setLayout( new GridLayout(2,3));
        add( button1 );
        add( button2 );
        add( button3 );
        add( button4 );
        add( button5 );
        add( button6 );

        setBackground( Color.black );
    }
    public static void main( String a [])
    {
        GridDemo gd = new GridDemo();
        gd.setSize( 423, 234 );
        gd.show();
    }
}

Übung:

Man kompiliere das Programm GridDemo im package gui.layout . Man teste das Fenster. Man beobachte das GridLayout, indem man das Fenster mit der Maus in seiner Grösse verändert. Man teste die anderen Möglichkeiten ein Gitter mit 6 Elementen zu füllen:
setLayout( new GridLayout(1,6));
setLayout( new GridLayout(3,2));
undsoweiter. Man ergänze die fehlenden Listener für die Buttons.

BorderLayout

Das BorderLayout hat 5 Zonen mit Namen "North", "East", "South", "West" und "Center". Im folgenden Beispiel werden 2 Panels erzeugt, das sind unsichtbare Hintergrundflächen, auf denen Buttons befestigt sind; dann werden die 2 Panels auf das BorderLayout der Form aufgebracht, eins in "North" und eins in "South". Beispiel:
package gui.layout;

import java.awt.*;

public class BorderDemo extends Frame
{
    Button button1 = new Button( "Rot" );
    Button button2 = new Button( "Gelb" );
    Button button3 = new Button( "Grün" );
    Button button4 = new Button( "Blau" );
    Button button5 = new Button( "Schwarz" );
    Button button6 = new Button( "Weiss" );

    public BorderDemo()
    {
        super( "Frame mit BorderLayout" );

        setLayout( new BorderLayout());
        Panel np = new Panel();
        add( "North", np );
        np.add( button1 );
        np.add( button2 );

        Panel sp = new Panel();
        add( "South", sp );
        sp.add( button3 );
        sp.add( button4 );
        sp.add( button5 );
        sp.add( button6 );

        setBackground( Color.black );
    }
    public static void main(String a [])
    {
        BorderDemo bd = new BorderDemo();
        bd.setSize( 423, 234 );
        bd.show();
    }
}

Übung:

Testen! Listener! Im Handbuch die Klasse Panel nachlesen!

Gar kein Layout: null

Man kann auf ein Layout verzichten und die einzelnen Elemente mittels ihrer Koordinaten plazieren. Die 4 Parameter im setBounds() bedeuten:

Beispiel:
package gui.layout;

import java.awt.*;

public class NullDemo extends Frame
{
    Button button1 = new Button("1");
    Button button2 = new Button("2");
    Button button3 = new Button("3");
    Button button4 = new Button("4");
    Button button5 = new Button("5");
    Button button6 = new Button("6");

    public NullDemo( String b )
    {
        super( b);
        setSize( 300,250 );
        setResizable( false );

        setLayout( null );
        button1.setBounds( 23, 23, 99, 27 );
        button2.setBounds( 23, 53, 99, 27 );
        button3.setBounds( 23, 83, 99, 27 );
        button4.setBounds( 23, 113, 99, 27 );
        button5.setBounds( 23, 143, 99, 27 );
        button6.setBounds( 23, 173, 99, 27 );
        add( button1 );
        add( button2 );
        add( button3 );
        add( button4 );
        add( button5 );
        add( button6 );

        setBackground( Color.black );
    }
    public static void main( String [] args )
    {
        NullDemo nl = new NullDemo( "Demo setLayout(NULL)" );
        nl.setVisible( true );
    }
}
Die Elemente werden also mit ihren Koordinaten angeordnet. Viele grafische Entwicklungsumgebungen arbeiten mit dem NullLayout.

Übung:

Testen! Listener! Man lese im Handbuch setLayout() und setResizable()


www.AndreasGoedel.de