目录
一、布局管理器介绍
二、布局管理器用法
(1)FlowLayout
(2)BorderLayout
(3)GridLayout
(4)CardLayout
(5)BoxLayout
三、Box容器的讲解
一、布局管理器介绍
布局管理器,顾名思义就是帮助我们在布局上面起到作用的管理器,可以帮助我们设定成我们想要的排列方式,这里我介绍的是AWT编程下的
二、布局管理器用法
(1)FlowLayout
在FlowLayout布局管理器中,组件就像水流一样向某方向流动,遇到障碍就返回,重头开始排列。在默认情况下,FlowLayout布局管理器是从左向右排列所有组件,遇到边界就会折回下一行重新开始
构造方法
(1)空参构造
FlowLayout() 表示构造一个中心对齐和默认为5单位水平和垂直间隙
(2)带参构造
FlowLayout(int align,int hgap,int vgap)
align表示对齐方式有三个:FlowLayout.center,FlowLayout.left,FlowLayout.right分别是中间对齐,左对齐,右对齐。hgap是水平间距,vgap是垂直间距
案列:做出如下的界面
public static void main(String[] arsg){
Frame s=new Frame("title");
s.setLayout(new FlowLayout(FlowLayout.LEFT,5,5));//布局管理器设置
for(int i=1;i<100;i++){
s.add(new Button("button:"+i));
}
s.pack();//使得页面是标准大小
s.setVisible(true);
}
(2)BorderLayout
BorderLayout布局管理器将容器分为EAST,SOUTH,NORTH,WEST,CENTER五个区域,普通组件可以被放置在这5个区域的任意一个中。
1:当向使用BorderLayout布局管理器的容器中添加组件时,需要指定添加到哪个区域中。如果没有指定,默认是添加到中间区域。
2:如果向同一个区域中添加多个组件时,后放入的组件会覆盖先放入的组件。
构造方法
BorderLayout()
构建新的边框布局,组件间没有间隙。
BorderLayout(int hgap, int vgap)
构造具有组件之间指定间隙的边框布局
下图案列:
public static void main(String[] arsg){
Frame s=new Frame("title");
s.add(new Button("north"),BorderLayout.NORTH);
s.add(new Button("west"),BorderLayout.WEST);
s.add(new Button("east"),BorderLayout.EAST);
s.add(new Button("center"),BorderLayout.CENTER);
s.add(new Button("south"),BorderLayout.SOUTH);
s.pack();
s.setVisible(true);
}
(3)GridLayout
GridLayout布局管理器将容器分割成纵横线分隔的网格,每个网格所占的区域大小相同。当向使用GridLayout布局管理器的容器中添加组件时,默认从左向右,从上向下依次添加到每个网格中,与FlowLayout不同的是,放置在GridLayout布局管理器中的各组件的大小由组件所处的区域决定
构造方法
GridLayout()
在单个行中创建一个每个组件的默认值为一列的网格布局。
GridLayout(int rows, int cols)
创建具有指定行数和列数的网格布局。
GridLayout(int rows, int cols, int hgap, int vgap)
创建具有指定行数和列数的网格布局。
案列如图:
public static void main(String[] arsg){
Frame s=new Frame("title");
s.setLayout(new GridLayout(3,4,4,4));
for(int i=1;i<=8;i++){
s.add(new Button(""+i));
}
s.add(new Button("+"));
s.add(new Button("-"));
s.add(new Button("/"));
s.add(new Button("*"));
s.pack();
s.setVisible(true);
}
(4)CardLayout
CardLayout布局管理器以时间而非空间来管理它的组件,它将加入容器的所有组件看成一叠卡片(每个卡片其实就是一个组件),每次只有最上面的那个Component才可见,就好像一副扑克牌,他们叠在一起,每次只有最上面的一张扑克牌才可见
构造方法
CardLayout()
创建一个新的卡片布局,其大小为零。
CardLayout(int hgap, int vgap)
创建具有指定的水平和垂直间隙的新卡布局。
常用方法
注:参数t表示容器
first(t) 显示t容器的第一张卡片
last(t) 显示t容器的最后一张卡片
previous(t) 显示t容器的前一张卡片
next(t) 显示t容器的后一张卡片
show(t,name) 显示t容器指定名字的卡片
案列如图:
public static void main(String[] arsg){
Frame s=new Frame("title");
CardLayout ca=new CardLayout();
Panel p1=new Panel();
Panel p2=new Panel();
p1.setLayout(ca);
String[] n={"第一","第二","第三","第四","第五"};
for(int i=0;i<n.length;i++){
p1.add(n[i],new Button(""+n[i]));
}
Button b1=new Button("第一");
Button b2=new Button("最后");
Button b3=new Button("下一张");
Button b4=new Button("上一张");
//绑定事件
ActionListener lis=new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String k=e.getActionCommand();//获得按钮上的文字
if(k=="第一"){
ca.first(p1);
}
else if(k=="最后"){
ca.last(p1);
}
else if(k=="上一张"){
ca.previous(p1);
}
else{
ca.next(p1);
}
}
};
b1.addActionListener(lis);
b2.addActionListener(lis);
b3.addActionListener(lis);
b4.addActionListener(lis);
p2.add(b1);
p2.add(b2);
p2.add(b3);
p2.add(b4);
s.add(p2,BorderLayout.SOUTH);
s.add(p1);
s.pack();
s.setVisible(true);
}
(5)BoxLayout
BoxLayout可以在垂直和水平两个方向上摆放GUI组件。
构造方法
BoxLayout(Container target, int axis)
创建一个布局管理器,它将沿着给定的轴布局组件。
案列
public static void main(String[] arsg){
Frame s=new Frame("title");
BoxLayout b=new BoxLayout(s,BoxLayout.Y_AXIS);
s.setLayout(b);
s.add(new Button("1"));
s.add(new Button("2"));
s.pack();
s.setVisible(true);
}
三、Box容器的讲解
Box容器的默认布局管理器就是BoxLayout,大多数情况下,使用Box容器去容纳多个GUI组件,然后再把Box容器作为一个组件,添加到其它得容器中,从而形成整体窗口布局
同时这里的间隔我们可以看成是一个组件,只不过没有内容而已
方法:
createHorizonBox() 创建一个水平排列组件的Box容器
createVerticalBox() 创建一个垂直排列组件的Box容器
间隔:
createHorizonGlue() 创建一个水平间隔,可以拉伸
createHorizonStruct(int t) 创建一个水平间隔,可设置固定间隔
createVerticalGlue() 创建一个垂直间隔,可以延伸
createVerticalStruct(int t) 创建一个垂直间隔,可以设置固定间隔
案列:
public static void main(String[] arsg){
Frame s=new Frame("title");
Box x=Box.createHorizontalBox();//创建水平
x.add(new Button("水平1"));
x.add(new Button("水平2"));
Box y=Box.createVerticalBox();//创建垂直
y.add(new Button("垂直1"));
y.add(new Button("垂直2"));
s.add(x,BorderLayout.NORTH);
s.add(y);
s.pack();
s.setVisible(true);
}
案列
public static void main(String[] arsg){
Frame s=new Frame("title");
//创建水平
Box x=Box.createHorizontalBox();
x.add(new Button("按钮1"));
x.add(Box.createHorizontalGlue());//可以延伸
x.add(new Button("按钮2"));
x.add(Box.createHorizontalStrut(30));//固定横向间隔
x.add(new Button("按钮3"));
//创建垂直
Box y=Box.createVerticalBox();
y.add(new Button("按钮4"));
y.add(Box.createVerticalGlue());//可以延伸间距
y.add(new Button("按钮5"));
y.add(Box.createVerticalStrut(30));//固定间距
y.add(new Button("按钮6"));
s.add(x,BorderLayout.NORTH);
s.add(y);
s.pack();
s.setVisible(true);
}