1. BorderLayout——方位布局:
1) 布局分为东西南北中五个方位,每个方位中只能放一个组件,如果同时放了多个组件,那么后放入的就会覆盖之前放入的,这点非常值得注意!
2) 如果添加组件时没有指定放在哪个方位则默认放在中;
3) 当BorderLayout布局的容器改变大小(发生拉伸)时,南北位只会水平伸缩,东西位只会垂直伸缩,而中会同时在水平和垂直方向上伸缩;
4) Window系(Frame、Dialog)和ScrollPane都是默认方位布局的;
5) 在对框架使用setLayout设定好方位布局之后,就可以在add组件的时候可以指定具体将组件放入那个方位中,这就Container类中对add的重载:
Component Container.add(Component comp, int index); // index就是在不同布局模式下特定的索引
!!在BorderLayout中就是5个方位,是BorderLayout类中定义的静态常量:NORTH、SOUTH、WEST、EAST、CENTER
!例如:f.add(new Button("test"), BorderLayout.EAST);
!!如果不指定方位,则默认加入到中部
6) 构造器:
i. 默认构造器:BorderLayout(); // 使用默认的
ii. 指定水平和垂直间距(组件之间的):BorderLayout(int hgap, int vgap);
7) 示例:
public class AwtTest { public static void main(String[] args) { // TODO Auto-generated method stub Frame f = new Frame("BorderLayout Test"); f.setLayout(new BorderLayout(30, 5)); f.add(new Button("East"), BorderLayout.EAST); f.add(new Button("West"), BorderLayout.WEST); f.add(new Button("Center")); // 默认放在中部 f.add(new Button("North"), BorderLayout.NORTH); f.add(new Button("South"), BorderLayout.SOUTH); f.pack(); f.setVisible(true); } }
8) 虽然方位布局只能容纳五个组件,看上去很没用,但是容器是可以嵌套的,一旦嵌套起来就可以形成很复杂的画面了,示例:嵌套一个Panel
public class AwtTest { public static void main(String[] args) { // TODO Auto-generated method stub Frame f = new Frame("BorderLayout Test"); f.setLayout(new BorderLayout(30, 5)); Panel p = new Panel(); p.add(new TextField(20)); p.add(new Button("push")); f.add(new Button("East"), BorderLayout.EAST); // no WEST,一旦一个方位没有放组件,那么相邻的方位就会侵占它的空间 f.add(p); f.add(new Button("North"), BorderLayout.NORTH); f.add(new Button("South"), BorderLayout.SOUTH); f.pack(); f.setVisible(true); } }