6.5 图形界面的布局设计 每一个容器组件都有一个默认的布局管理方式,也可以用setLayout方法来设置其他布局管理器。一旦确定了布局管理方式,容器组件就可以用add方法加入组件。 布局管理器用来确定组件在容器中的位置和大小,AWT中定义了布局管理器接口LayoutManager的实现类来实现此功能。
LayoutManager的实现类: 6.5.1 FlowLayout布局管理器 FlowLayout BorderLayout GridLayout GridBagLayout CardLayout null LayoutManager的实现类: 6.5.1 FlowLayout布局管理器 FlowLayout是一种最简单的布局管理,是Panel的默认布局。它以流式自左向右、自上而下地放置容器中的组件,其默认方式为居中对齐方式,也可以手工设置左对齐或右对齐。
创建默认的FlowLayout布局管理器: FlowLayout() 以指定的对齐方式创建: FlowLayout(int) FlowLayout(int,int,int) FlowLayout.LEFT FlowLayout.RIGHT FlowLayout.CENTER 对齐方式 组件行间距 组件列间距
6.5.2 BorderLayout布局管理器 BorderLayout是Frame和Dialog的默认布局。它将整个容器分为东、西、南、北、中5个部分,加入组件时需要指明放置的位置。 创建默认的BorderLayout布局管理器: BorderLayout() 以指定的行、列间距创建BorderLayout布局管理器: BorderLayout(int,int) 组件行间距 组件列间距
BorderLayout的主要方法 int getHgap( ) 返回组件间距 int getVgap( ) 返回列间距 void setHgap(int) 设置组件间距 void setVgap(int) 设置列间距
6.5.3 GridLayout布局管理器 GridLayout布局将容器划分成m行x n列大小相同的格子,组件放在格子中。 GridLayout(int,int) 以指定的行数、列数、行间距、列间距创建布局: GridLayout(int,int,int,int)
GridLayout的主要方法 int getHgap( ) 返回组件间距 int getVgap( ) 返回列间距 void setHgap(int) 设置组件间距 void setVgap(int) 设置列间距 int getRows( ) 获取网格的行数 int getColumns( ) 获取网格的列数 void setRows(int) 设置网格的行数 void setColumns(int ) 设置网格的列数
import java.applet.*; import java.awt.*; import java.awt.event.*; public class TestGridLayout extends Applet { public void init() setLayout(new GridLayout(5,6)); //GridLayout布局策略5行6列30网格 for(int i=0;i<5;i++) for(int j=0;j<6;j++) // if((int)(Math.random()*100)>=0) if((int)(Math.random()*100)>=50) add(new Button(Integer.toString(i*6+j))); //随机加入按钮 else add(new Label()); //随机加入空白 }
6.5.4 GridBagLayout布局管理器 GridBagLayout布局将容器划分成很多矩形小格子,每个组件可以占用一个或多个单元,从而可以指定每个组件所占空间的大小 创建默认的GridBagLayout布局: GridBagLayout() 通过设置和组件有关的GridContaints对象的属性来分配每个组件,然后调用GridBagLayout的setContaints方法将组件与GridContaints对象关联,最后将组件加入容器中。
GridContaints对象的常用属性 (1)gridwidth, gridheight 这两个参数决定组件所占空间单元的行数和列数,默认值为1。 (2)fill 当组件显示区域比其尺寸大时,该参数确定怎样重新定义组件大小,其默认值为: GridBagContaints.NORE (不重新定义大小) 还可以为: GridBagContaints.Horizontal (水平方向拉伸填满) GridBagContaints.Vertical (垂直方向拉伸填满) GridBagContaints.BOTH (两个方向拉伸填满) (3)weightx, weighty 指定分配多余空间的方式
6.5.5 CardLayout布局管理器 CardLayout布局将容器中的组件象扑克牌一样排列,每次只能显示最上面的一张。 以指定的行间距、列间距创建GridLayout布局: CardLayout(int,int) 将组件(通常是Panel)以CardLayout加入时,需要指定一个名字,如:add(“ONE”, Panel)
CardLayout的主要方法 int getHgap( ) 返回组件间距 int getVgap( ) 返回列间距 void setHgap(int) 设置组件间距 void setVgap(int) 设置列间距 void first( ) 显示第一个加入布局的组件 void last( ) 显示最后一个加入布局的组件 void next( ) 显示当前组件的下一个组件 void previous( ) 显示当前组件的前一个组件
6.5.6 null 布局管理器 null 布局管理器将主动权交给用户,由用户使用坐标系统来放置每个组件,即调用组件的setBounds()方法来设置位置和大小。 如: this.setLayout(null); Label L1=new Label(“test”); L3.setBounds(new Rectangle(108, 2, 98, 37)); Add(L3); X 、y 坐标、长、宽