布局管理器种类
FlowLayout: 组件在一行中从左至右水平排列,排满后折行,它是Panel、Applet的默认布局管理器。
BorderLayout:北、南、东、西、中,它是Window、Frame、Dialog的默认布局管理器。
GridLayout:以行和列的网格形式安排组件
GridBagLayout:更复杂、功能更强的网格布局
CardLayout:每一个组件作为一个卡片,容器仅显示多个卡片中的某一个确定容器布局
1.容器的组件布局
(1)布局管理器(layout manager)
负责确定组件在容器中的位置和大小。
调用容器的setLayout(布局管理器对象) 方法,为容器指定某种布局管理器的一个对象。
当容器需要定位组件和确定组件大小时,就会给布局管理器对象发消息,让它完成该项工作。
(2)直接管理组件
调用容器的 setLayout(null) 方法,关闭布局管理器。
调用每一个组件的setLocation()方法决定组件位置。
调用每一个组件的setSize()方法决定其大小。
(3)直接管理组件将失去平台无关性。
2.FlowLayout布局管理器
构造函数:
FlowLayout() ;
FlowLayout(int align, int hgap, int vgap);
align :对齐方式:LEFT CENTER RIGHT
hgap :组件水平间距 (象素)
vgap :组件垂直间距
无参数的构造函数创建的FlowLayout对象,其对齐方式为CENTER居中方式,组件间的横纵间距都为5个像素
Frame f = new Frame("FlowLayout");
f.setSize(400,300); //不起作用
f.setBackground(Color.gray);
f.setLayout(new FlowLayout(FlowLayout.LEFT,10,20));
b1 = new Button("button1");
b2 = new Button("button2");
b3 = new Button("button3");
f.add(b1);
f.add(b2);
f.add(b3);
f.setVisible(true);
f.pack();
3.BorderLayout布局管理器
setLayout(new BorderLayout() )
add(b1,BorderLayout.NORTH); //东、西、南、北中
当容器大小改变,组件相对位置不会改变
setLayout(new BorderLayout() )
add(b1,BorderLayout.NORTH);
当容器大小改变,组件相对位置不会改变
Frame f = new Frame("BorderLayout");
f.setSize(200,200);
b1 = new Button("button1");
…
b5 = new Button("button5");
f.add(b1,BorderLayout.NORTH);
f.add(b2,BorderLayout.SOUTH);
f.add(b3,BorderLayout.WEST);
f.add(b4,BorderLayout.EAST);
f.add(b5,BorderLayout.CENTER);
f.setVisible(true);
4.GridLayout布局管理器
创建GridLayout对象作为布局编辑器,指定划分网格的行数和列数(网格大小一样)。
setLayout(new GridLayout(行数, 列数));
setLayout(new GridLayout(行数, 列数,行间隔,列间隔));
调用容器的方法add()将组件加入容器,组件填入容器的顺序将按照第一行第一个、第一行第二个、……
每个网格中都必须填入组件,如果希望某个网格为空白,可以为它加入一个空的标签:
add (new Label());
Frame f = new Frame("GridLayout");
f.setLayout(new GridLayout(2,3));
f.setSize(200,100);
f.setBackground(Color.gray);
b1 = new Button("1");
…
b6 = new Button("6");
f.add(b1);
…
f.setVisible(true);
练习题:
(1) 下面关于布局管理器说法正确的有(ACD)。 A、布局管理器用来管理组件放置在容器中的位置和大小
B、不是每个容器都有一个布局管理器
C、使用布局管理器可以使JAVA生成的图形用户界面具有平台无关性
D、布局管理器LayoutManager本身是一个接口,通常使用的是实现了该接口的类