布局管理器
当一个窗口中的组件较多时,界面应该简洁整齐,布局合理。Java采用布局管理器对容器中的组件进行相对布局,当改变容器大小时,或者改变组件的大小,或者改变组件之间的相对位置,保证组件不会被覆盖并且容器没有空白区域。
Java提供多种风格和特点的布局管理器,每一种布局管理器指定一种组件之间的相对位置。Java.awt中的布局管理器类主要有:FlowLayout、BorderLayout和GridLayout。
布局是容器类的特性,每种容器都有一中默认布局。Window窗口类的默认布局管理器是BorderLayout,Panel面板类的默认布局是FlowLayout。如果一个容器需要改变其默认布局管理器,可以调用Container容器类的FlowLayout()方法。
1、 FlowLayout流布局管理器
FlowLayout布局管理器提供按行布置组件方式,将组件按从左到右顺序、一行一行地排列,当一行放满时再放置下一行。组件保持自己的尺寸,容器中一行的宽度随容器的宽度而变化。当改变容器大小时,组件的相对位置随容器大小而变化,将呈现一行或多行。
FlowLayout类的部分声明如下:
public class FlowLayout implementsLayoutManager.jaca.io.Serializable{
public static final intLEFT=0;//左对齐
public static final intCENTER=1;// 居中
public static final intRIGHT=2;//右对齐
publicFlowLayout()//构造方法,默认居中
public FlowLayout(intalign)//align参数指定对齐方式
public FlowLayout(int align,int hgap,intvgap)//hgap、vgap指定组件间的水平和垂直间距
}
2、 BorderLayout边界布局管理器
BorderLayout布局管理器将容器划分为五个区域,东、南、西、北四条边和中间,组件占满一条边或中间部分。当改变容器大小时,四边组件的长度或宽度不变,中间组件的长度和宽度随着容器大小而变化。
BorderLayout类的部分声明如下:
public class BorderLayout implementsLayoutManager2,java.io.Serializable{
public static final String NORTH="North";
public static final String SOUTH="South";
public static final String EAST="East";
public static final String WEST="West";
public static final String CENTER="Center";
publicBorderLayout()//构造方法,组件之间的间距为0像素
public BorderLayout(int hgap,intvgap)//参数指定组件之间的水平和垂直间距(像素)
}
Container类为BorderLayout布局提供以下添加组件的方法:
public void add(Component comp,Object constraints)
其中,constrains参数指定组件添加到BorderLayout布局容器的位置,取值为BordetLayout类的常量,如BorderLayout.EAST或“South”。例如,下列语句将5个按钮一次放置在框架的5个区域中:
Frame frame =new Frame();
frame.add(new Button("东"),BorderLayout.EAST);
frame.add(new Button("南"),"South");
frame.add(ne w Button("西"),"West");
frame.add(new Button("北"),"North");
frame.add(newButton("中"),BorderLayout.CENTER);//可以省略为this.add(new Button("中"));
当constraints参数取值为BorderLayout.CENTER时,参数可以省略。如果将多个组件放置在同一个区域,则后放置组件将覆盖先放置的组件。
3、 GridLayout网格布局管理器
GridLayout布局管理器将容器划分为大小相等的若干行乘若干列的网格,组件从左至右,从上至下一次放入网格中。组件大小随容器大小而变化。如果组件数多于网格数,Java将自动增加网格;反之,一些网格将空置。
GridLayout类的部分声明如下:
public class GridLayout implementsLayoutManager,java.io.Serializable{
public GridLayout()
public GridLayout(int rows,int cols)
public GridLayout(int rows,int cols,int hgap,int vgap)
}
GridLayout布局的组件放置次序是行优先,从第一行开始,从左至右依次放置,一行放满后自动转入下一行。如果组件数超过网格数,则布局管理器会自动增加网格数,增加的原则是保持行数不变。如果需要在指定位置放置组件,则可调用Container类为GridLayout布局提供以下方法:
public Component add(Component comp,int index)
例如:
Frame frame=new Frame();
frame.setLayout(newGridLayout(3,2));//设置3行2列的网格布局
frame.add(newButton("botton1"));//依次添加组件
frame.add(newButton("botton2"),0);//将组件插入在指定位置