(一)在java语言中,提供了布局管理器的对象可以管理
《1》管理Component在Container的布局,不必直接设置Component位置和大小
《2》每个Container都有一个布局管理对象,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其对应的布局管理器,调用Container的setLayout方法改变其布局管理器对象。
(二)AWT提供了5种布局管理器:FlowLayout,BorderLayout,GridLayout,CardLayout,GridBagLayout
《1》FlowLayout布局管理器
a:FlowLayout是Panel类的默认的布局管理器;
FlowLayout布局管理器对组件逐行定位,行内从左到右,一行排满后换行
不改变组件的大小,按组件原有尺寸显示组件可设置不同的组件间距,行距以及对齐方式
b:FlowLayout布局管理器默认的对齐方式是居中
c:FlowLayout的构造方法
new FlowLayout(FlowLayout.RIGHT,20,40):右对齐,组件之间水平间距20个像素,垂直间距40个像素
new FlowLayout(FlowLayout.LEFT):左对齐,水平和垂直间距为缺省值(5)
new FlowLayout():使用缺省的剧中对齐方式,水平和垂直间距为缺省值(5)
举例如下:
import java.awt.*;
public class TestFlowLayout {
public static void main(String[] args){
Frame f = new Frame("Frame Layout");
Button button1 = new Button("OK");
Button button2 = new Button("Open");
Button button3 = new Button("Close");
f.setLayout(new FlowLayout());
f.add(button1);
f.add(button2);
f.add(button3);
f.setSize(100,100);
f.setVisible(true);
}
}
运行结果:
import java.awt.*;
public class TestFlowLayout2 {
public static void main(String[] args){
Frame f = new Frame("java Frame");
FlowLayout l = new FlowLayout(FlowLayout.CENTER,20,40);
f.setLayout(l);
f.setLocation(300,400);
f.setSize(300,200);
f.setBackground(new Color(204,204,255));
for(int i=1;i<=7;i++){
f.add(new Button("BUTTON"));
}
f.setVisible(true);
}
}
运行结果:
《2》BorderLayout布局管理器
a:BorderLayout是Frame类的默认布局管理器
b:BorderLayout将整个容器的布局划分成东(EAST)西(WEST)南(SOUTH)北(NORTH)中(CENTER)5个区域,组件只能被添加到指定的区域
c:如不指定组件的加入部位,则默认加入到CENTER
d:每个区域只能加入一个组件,如加入多个,则先前加入的会被覆盖
e:BorderLayout型布局容器尺寸缩放原则:南北两个区域在水平方向缩放;东西两个区域在垂直方向缩放;中部可在两个方向上缩放
举例如下:
import java.awt.*;
public class TestBorderLayout {
public static void main(String[] args){
Frame f;
f = new Frame("hello");
Button b1 = new Button("B1");
Button b2 = new Button("B2");
Button b3 = new Button("B3");
Button b4 = new Button("B4");
Button b5 = new Button("B5");
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.setSize(200,200);
f.setVisible(true);
}
}
运行结果:
《3》GirdLayout布局管理器
a:GirdLayout型布局管理器将空间划分成规则的矩形网格,每个单元格区域大小相等,组件被添加到每个单元格中,先从左到右添满一行后换行,再从上到下
b:在Gridlayout构造方法中指定分隔的行数和列书
举例如下:
import java.awt.*;
public class TestGridLayout {
public static void main(String[] args){
Frame f = new Frame("GridLayout Example");
Button b1 = new Button("b1");
Button b2 = new Button("b2");
Button b3 = new Button("b3");
Button b4 = new Button("b4");
Button b5 = new Button("b5");
Button b6 = new Button("b6");
f.setLayout(new GridLayout(3,2));
f.add(b1);
f.add(b2);
f.add(b3);
f.add(b4);
f.add(b5);
f.add(b6);
f.pack();
f.setVisible(true);
}
}
运行结果:
布局管理器总结:
1,Frame是一个顶级窗口,Frame的缺省布局管理器为 BorderLayout
2,Panel无法单独显示,必须添加到某个容器中,Panel的缺省布局管理器为FlowLayout
3,当把Panel作为一个组件添加到某个容器中后,该Panel仍然可以直接有自己的布局管理器
4,使用布局管理器时,布局管理器负责各个组件的大小和位置,因此用户无法在这种情况下设置组件大小和位置属性,如果试图使用java语言提供的setLocation(),setSize(),setBounds()等方法,则会被布局管理器覆盖
5,如果用户确实不需要亲自设置组件大小或位置,则应取消该容器的布局管理器,反复为setLayout(null)
|