LayoutManager |
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:
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.
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();
}
}
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.
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();
}
}
Panel nachlesen!
Man kann auf ein Layout verzichten und die einzelnen Elemente mittels ihrer Koordinaten plazieren. Die 4 Parameter im setBounds() bedeuten:
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()