FlowLayout从左向右排列所有组件,遇到边界就会折回下一行从新开始。它有三个构造器FlowLayout(),FlowLayout(int align)和 FlowLayout(int align, int hgap, int vgap),其中的hgap和vgap代表水平间距和垂直间距,align指的是组件的排列方向(从左向右,从右向左,从中间向两边),我们可以使用FlowLayout的静态常量来设置这个参数:FlowLayout.LEFT,FlowLayout.CENTER,FlowLayout.RIGHT.
BorderLayout将容器分为EAST,SOUTH,WEST,NORTH,CENTER五个区域,如下图所示:
我们在向使用此布局管理器的容器中添加组件时,需要制定添加到的区域,否则就默认添加到中间区域里,而当我们向一个区域添加多个组件时,后放入的组件会覆盖前面的组件。BorderLayout有两个构造器,BorderLayout()和BorderLayout(int hgap,int vgap),hgap和vgap代表的水平间距和垂直间距。我们在指定组件添加到的区域时,可以使用它的静态常量:BorderLayout.EAST, BorderLayout.WEST, BorderLayout.NORTH, BorderLayout.SOUTH, BorderLayout.CENTER.例如:
Frame f = new Frame();
f.setLayout(new BorderLayout(5,5));
f.add(new Button("南"),SOUTH);//将一个按钮添加到南的位置
BorderLayout最多只能放5个组件,但是实际上我们可以先在Panel中添加多个组件,再将Panel添加到BorderLayout布局管理器中,因此我们实际可以放的组件要远远超过5个。
GridLayout将容器分割成大小相同的网格,我们在添加组件时将默认从左到右从上到下,将组件依次添加到每个网格中,而每个组件的大小也就由其所添加到的网格的大小所决定。GridLayout同样也有两个构造器,GridLayout(int rows,int cols)和GridLayout(int rows ,int cols,int hgap,int vgap),使用GridLayout的典型例子就是计算器的窗口:
import java.awt.*;
public class calculator
{
public static void main(String[] args)
{
Frame f = new Frame("计算器");
Panel p1 = new Panel();
p1.add(new TextField(30));
f.add(p1,BorderLayout.NORTH);
//设置p2采用GridLayout布局管理器
Panel p2 = new Panel();
p2.setLayout(new GridLayout(3,5,4,4));
String[] name = {"0","1","2","3","4","5","6","7","8","9","+","-","*","/","."};
for(int i=0;i<name.length;i++)
{
p2.add(new Button(name[i]));
}
f.add(p2);//默认添加到中间
f.pack();// 设置窗口为最佳大小
f.setVisible(true);
}
}
运行结果如图:
CardLayout将加入容器的所有组件看成一叠卡片,每次只有最上面的那个Component才可见,它有两个构造器CardLayout()和CardLayout(int hgap, int vgap),有五个方法用来控制其中的组件:
first(Container target);//显示target容器中的第一张卡片
last(Container target);
previous(Container target);
next(Container target);
show(Container target,String name);//显示targer容器中指定名字的卡片
例子:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class calculator {
Frame f;
Panel p1;
Panel p2;
String[] name = {"1","2","3","4","5"};
CardLayout c;
public void init()
{
f = new Frame("yz");
p1 = new Panel();
p2 = new Panel();
c = new CardLayout();
p1.setLayout(c);
for(int i=0;i<name.length;i++)
{
p1.add(name[i],new Button(name[i]));
}
//控制显示上一张的按钮
Button previous = new Button("上一张");
previous.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
c.previous(p1);
}
});
//控制显示下一张的按钮
Button next = new Button("下一张");
next.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
c.next(p1);
}
});
//控制显示第一张的按钮
Button first = new Button("第一张");
first.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
c.first(p1);
}
});
//控制显示最后一张的按钮
Button last = new Button("最后一张");
last.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
c.last(p1);
}
});
//根据card名显示的按钮
Button third = new Button("第三张");
third.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)