BorderLayout将容器分为EAST(东)、SOUTH(南)、WEST(西)、NORTH(北)、CENTER(中) 5个区域,普通组件可以放置在这5个区域中的任意一个中。BorderLayout布局管理器的布局示意图如下。
当改变使用BorderLayout的容器大小时,SOUTH(南)、NORTH(北)和CENTER(中)区域水平调整,而EAST(东)、WEST(西)和CENTER(中)区域垂直调整。
使用BorderLayout需要注意两点:
1、当向使用BorderLayout布局管理器中添加组件时,需要制定要添加到哪个区域中,如果没有指定,则默认添加到中间区域。
2、如果向同一个区域中添加多个组件时,后放入的组件会覆盖先放入的组件。
Frame、Dialog、ScrollPane默认使用BorderLayout布局管理器,BorderLayout有以下两个构造器:
1. BorderLayout():使用默认的水平间距、垂直间距创建BorderLayout布局管理器。
2. BorderLayout(int hgap, int vgap):使用指定的水平间距、垂直间距创建BorderLayout布局管理器。
当向使用BorderLayout布局管理器的容器中添加组件时,应该使用BorderLayout类中的几个静态常量来制定添加到哪个区域中。BorderLayout有如下几个静态常量:EAST(东)、SOUTH(南)、WEST(西)、NORTH(北)、CENTER(中)。
/**
* 程序示范了BorderLayout的用法
*/
package codes11;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
public class BorderLayoutTest {
public static void main(String[] args) {
Frame f = new Frame("测试窗口");
// 设置Frame容器使用BorderLayout布局管理器
f.setLayout(new BorderLayout(30, 5));
f.add(new Button("北"), BorderLayout.NORTH);
f.add(new Button("南"), BorderLayout.SOUTH);
// 默认添加到中间区域中
f.add(new Button("中"));
f.add(new Button("西"), BorderLayout.WEST);
f.add(new Button("东"), BorderLayout.EAST);
f.pack();
f.setVisible(true);
}
}
运行程序,结果如下图
当使用BorderLayout布局管理器时,每个区域的组件都会尽量去占据整个区域,所以中间的按钮比较大。
/**
* 以下程序没有向WEST区域添加组件,但向CENTER区域添加了一个Panel容器,该Panel容器中包含了一个文本框和一个按钮。
* 程序虽然没有向WEST区域添加组件,但窗口中依然有5个组件,因为CENTER区域添加的是Panel,而该Panel里包含了2个组件。
*/
package codes11;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.TextField;
public class BorderLayoutTest2 {
public static void main(String[] args) {
Frame f = new Frame("测试窗口");
f.setLayout(new BorderLayout(30, 5));
f.add(new Button("南"), BorderLayout.SOUTH);
f.add(new Button("北"), BorderLayout.NORTH);
// 创建一个Panel对象
Panel p = new Panel();
// 向Panel中添加两个组件
p.add(new TextField(20));
p.add(new Button("单击我"));
// 默认添加到中间区域中,向中间区域添加一个Panel容器
f.add(p);
f.add(new Button("东"), BorderLayout.EAST);
f.pack();
f.setVisible(true);
}
}
运行程序,结果如下图: