GUI——布局管理器
1.GUI之布局管理器
布局管理器
java语言中,提供了布局管理器类的对象可以管理
管理Component在Container中的布局,不必直接设置Component的位置和大小
每个Container都有一个布局管理器对象,当容器需要对某个组件进行定位或判断尺寸大小时,
就会调用其对应的布局管理器,调用Container的setLayout方法,改变其布局管理器对象。
AWT提供了五种布局管理器类
FlowLayout
BorderLayout
GridLayout
CardLayout
GridBagLayout
2.FlowLayout布局管理器(流式布局,顺序布局)
java.awt
Class FlowLayout
FlowLayout时Panel类的默认布局管理器
FlowLayout布局管理器对组件逐行定位,行内从左到右,一行排满后换行。
不改变组件的大小,按组件原始尺寸显示组件,可设置不同的组件间距,行距和对其方式。
FlowLayout布局管理器默认的对其方式时居中。
FlowLayout的构造方法
Constructor Summary(构造函数的总结)
Constructors(构造函数)
Constructor and Description(构造函数和描述)
FlowLayout()
Constructs a new FlowLayout with a centered alignment and a default 5-unit horizontal and vertical gap.
FlowLayout(int align)
Constructs a new FlowLayout with the specified alignment and a default 5-unit horizontal and vertical gap.
FlowLayout(int align, int hgap, int vgap)
Creates a new flow layout manager with the indicated alignment and the indicated horizontal and vertical gaps.
实例1:
/* 范例名称:FlowLayout 用法举例
* 源文件名称:TestFlowLayout.java
* 要 点:
* 1. 布局管理器的概念和作用
* 2. FlowLayout的性质及用法
*/
import java.awt.*;
public class TestFlowLayout {
public static void main(String args[]) {
Frame f = new Frame("Flow Layout");
Button button1 = new Button("Ok");
Button button2 = new Button("Open");
Button button3 = new Button("Close");
//new FlowLayout(FlowLayout.LEFT)设置Frame的布局,默认为居中,此次为左对齐
f.setLayout(new FlowLayout(FlowLayout.LEFT));
f.add(button1);
f.add(button2);
f.add(button3);
f.setSize(100,100);
f.setVisible(true);
}
}
实例2:
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);
//为Frame设置布局方式
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);
}
}
3.BorderLayout布局管理器(边框布局,边界布局,边界布局管理器)
java.awt
Class BorderLayout
BorderLayout时Frame的默认布局管理器,
BorderLayout将整个容器的布局划分成东西南北中五个区域,组件只能被添加到指定区域。
东EAST
西WEST
南SOUTH
北NOUTH
中CENTER
不指定组件的加入部位,则默认加入到CENTER区。
每个区域只能加入一个组件,如加入多个,先前加入的会被覆盖。
BorderLayout布局,容器尺寸缩放原则
南,北两个区域在水平方向缩放
东,西两个区域在垂直方向缩放
中部可在两个方向上缩放
实例3:
/* 范例名称:BorderLayout应用举例
* 源文件名称:TestBorderLayout.java
* 要 点:FlowLayout布局管理器的性质及用法
*/
import java.awt.*;
public class TestBorderLayout {
public static void main(String args[]) {
Frame f;
f = new Frame("Border Layout");
Button bn = new Button("BN");
Button bs = new Button("BS");
Button bw = new Button("BW");
Button be = new Button("BE");
Button bc = new Button("BC");
f.add(bn, "North");
f.add(bs, "South");
f.add(bw, "West");
f.add(be, "East");
f.add(bc, "Center");
// 也可使用下述语句,推荐使用下面这种形式,不容易出错
/*
f.add(bn, BorderLayout.NORTH);
f.add(bs, BorderLayout.SOUTH);
f.add(bw, BorderLayout.WEST);
f.add(be, BorderLayout.EAST);
f.add(bc, BorderLayout.CENTER);
*/
f.setSize(200,200);
f.setVisible(true);
}
}
4.GridLayout布局管理器(网格布局 )
java.awt
Class GridLayout
GridLayout布局管理器将空间划分成规则的矩形网格,
每个单元格区域大小相等。
组件被添加到每个单元格中,先从左到有填满一行后换行。再从上到下。
在GridLayout构造方法中指定分割的行数和列数。
如:
GridLayout(3,4);//三行四列
实例4:
/* 范例名称:GridLayout应用举例
* 源文件名称:TestGridLayout
* 要 点: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);
//pack();打包,
f.pack();
f.setVisible(true);
}
}
5.测试练习
用FlowLayout,BorderLayout,GridLayout来实现较为复杂的布局。
实例5:
import java.awt.*;
public class TenButtons {
public static void main(String args[]) {
Frame f = new Frame("Java Frame");
//两行一列
f.setLayout(new GridLayout(2,1));
f.setLocation(300,400);
f.setSize(300,200);
f.setBackground(new Color(204,204,255));
Panel p1 = new Panel(new BorderLayout());
Panel p2 = new Panel(new BorderLayout());
Panel p11 = new Panel(new GridLayout(2,1));
Panel p21 = new Panel(new GridLayout(2,2));
p1.add(new Button("BUTTON"),BorderLayout.WEST);
p1.add(new Button("BUTTON"),BorderLayout.EAST);
p11.add(new Button("BUTTON"));
p11.add(new Button("BUTTON"));
p1.add(p11,BorderLayout.CENTER);
p2.add(new Button("BUTTON"),BorderLayout.WEST);
p2.add(new Button("BUTTON"),BorderLayout.EAST);
for(int i =1;i<=4;i++) {p21.add(new Button("BUTTON"));}
p2.add(p21,BorderLayout.CENTER);
f.add(p1);
f.add(p2);
f.setVisible(true);
}
}