Designed by Chiyong,?20051
Java2 网络编程基础
GUI 编程第六章
Designed by Chiyong,?20052
回顾
运行时发生的错误称为异常。
Java 使用 try 和 catch 块来处理异常。 try
块中的语句引发异常,而 catch 块则处理异常。
可以同时使用多个 catch 块来分别处理各种异常类型。
关键字 throws 用于列出一个方法可能引发的异常类型。
Java 中的垃圾收集就是将分配给对象但不再使用的内存回收或释放的过程。
Designed by Chiyong,?20053
目标
了解 AWT 包及其组件
掌握如何创建 GUI 程序
掌握 AWT 组件的基本用法
掌握如何使用布局管理器构造复杂的布局
Designed by Chiyong,?20054
抽象窗口工具包 (AWT包 )
图形用户界面 (GUI)可以通过键盘或鼠标来响应用户的操作。
抽象窗口工具包 (AWT,Abstract Window
Toolkit)是一组 Java类,此组 Java类允许创建图形用户界面 (GUI)。
AWT提供了用以生成生动而高效的 GUI的各种 组件,事件处理 的系统和安排组件来实现平台无关性的机制 ( 布局管理器 ) 。
Designed by Chiyong,?20055
applet 在不同平台上的显示平台 A 平台 B
applet applet
没有办法来确定 applet 在屏幕上的位置,所以 applet
在不同的平台上运行时,可能显示在不同的位置,这依赖与该系统的坐标系统。
(0,0) (0,0)坐标系统 坐标系统
Designed by Chiyong,?20056
摆放组件时的问题
跟前面的图所看到的一样,在不同的屏幕上对象的摆放将呈现不同的位置。
按 绝对坐标 在屏幕上摆放组件,将在不同屏幕上显示时产生问题。这是因为不同的屏幕使用不同的布局系统。因此为了处理这个组织组件的难题,Java使用了容器 Containers
和布局管理器 Layout Managers (实际上是
java.awt包中的 布局类 )。
Designed by Chiyong,?20057
容器
容器 是可以存放组件的区域。可对组件分组,或在容器上进行绘制和着色。
java.awt包中的 Container类可直接或间接派生出两个常用容器:框架( Frame类)
和面板( Panel类)。
框架是一个带有边框的独立的窗口。
面板是包含在窗口中的一个不带边框的区域。
Designed by Chiyong,?20058
了解 java.awt 包中的类体系结构
Component
Button Checkbox Container Choice Canvas
TextComponent
Label
Panel Window
Applet Frame Dialog
TextArea TextFieldScrollPane
MenuComponent
Object
Designed by Chiyong,?20059
容器 – 框架
框架 是一个具有完全功能的窗体,并带有自己的标题和图标。
可以通过以下任一构造函数来创建:
– Frame():创建一个不含标题的标准窗口
– Frame(String Title),创建一个含有标题的窗口,
这个标题是由参数 title指定的。
当一个 Frame窗口被创建以后,需要调用
setSize()方法来设置窗口的大小,并调用
setVisible()来显示窗口。
Dialog,可看成是 pop-up window,当错误发生时将弹出来显示错误消息。它不象 Frame是一个完全功能的窗体
Designed by Chiyong,?200510
容器 - 面板
面板 是一个纯粹的容器,它本身并不是 Window,
它的唯一作用就是用来组织窗体上的组件。
最简单的创建面板的方式就是通过面板的构造函数 Panel() 来进行。
必须将面板添加到窗体中。
ScrollPane,一个带滚动栏的窗体可以显示屏幕放不下的内容。
Designed by Chiyong,?200511
使用容器示例
import java.awt.*;
class PanelTest extends Panel {
public static void main(String args[]) {
PanelTest p= new PanelTest();
Frame f=new Frame("正在测试面板 ! ");
f.add(p);
f.setSize(300,200);
f.setVisible(true);
}
}
使用 GUI组件必须导入该包将面板添加到框架窗体中
Designed by Chiyong,?200512
AWT组件
组件指可以放置在用户界面上的任何东西,
可以将组件设置为可见或重新调整其大小。
AWT支持的组件:标签、文本域、文本区、
按钮、复选框、选择框等。
高级组件包括滚动条、滚动窗格和对话框。
向窗口加入一个组件:首先生成所需组件的实例,然后调用 add()方法,此方法是在
Container类中定义的。
Designed by Chiyong,?200513
不同组件标签文本域复选框单选按钮文本区按钮
Designed by Chiyong,?200514
文本域
可以通过以下任一构造函数来创建:
- TextField(),新建一个 文本域
- TextField(int columns),新建一个包含给定列数的 文本域
- TextField(String s),新建一个包含给定字符串的 文本域
- TextField(String s,int columns),新建一个包含给定字符串和列数的 文本域
一种用来输入文本的 GUI组件
只能接受一行输入
Designed by Chiyong,?200515
标签和文本域使用示例
import java.awt.*;
class TextLabelDemo extends Frame {
Label lblName=new Label(“名称,” );
TextField txtName=new TextField(20);
public TextLabelDemo (String title) {
super(title);
setLayout(new FlowLayout());
add(lblName);
add(txtName);
}
public static void main(String args[]) {
TextLabelDemo t=new TextLabelDemo("正在测试组件 ! ");
t.setSize(300,200); t.setVisible(true);
}
}
新建一个标签新建一个文本域添加到窗口
Designed by Chiyong,?200516
文本区
可以通过以下构造函数来创建:
- TextArea( ),新建一个 文本区
- TextArea(int rows,int cols),新建一个包含给定行数和列数的 文本区
- TextArea(String text,int rows,int
cols),新建一个包含给定字符串、行数和列数的 文本区
要接受输入多行文本时使用
可以包括滚动条
.,,
TextArea txtComment=new TextArea();
add(txtComment);
.,,
Designed by Chiyong,?200517
按钮
可以使用以下任一构造函数来创建按钮:
- Button(),新建一个空的 按钮
- Button(String text),新建一个包含给定字符串的 按钮
按钮是任何 GUI都 不可或缺的组件
用来捕捉用户操作的最为简便的方式
.,,
Button btnOk=new Button("确定 ! ");
Button btnCancel=new Button("取消 ! ");
add(btnOk);
add(btnCancel);
.,,
Designed by Chiyong,?200518
复选框
可以使用以下任一构造函数来创建复选框:
- Checkbox(),创建一个空的复选框,且未被选中
- Checkbox(String text),创建一个用给定字符串作为标签的复选框,且未被选中
- Checkbox(String text,Boolean on),创建一个标签由参数 text指定的复选框,允许通过参数
on设定复选框的初始状态。
用于多选项的用户输入,用户可以通过单击复选框来选定或取消选定某选项。
Designed by Chiyong,?200519
单选按钮
可以通过复选框组生成一系列互斥的复选框,实现单选按钮功能。
在一组单选按钮中只能选择一个按钮。
首先创建一个 CheckboxGroup 对象。
CheckboxGroup cg=new CheckboxGroup();
然后再创建各单选按钮。
Checkbox male=Checkbox("男 ",cg,true);
Checkbox female=Checkbox("女 ",cg,false);
Designed by Chiyong,?200520
复选框和单选按钮使用示例
import java.awt.*;
class Qualification extends Frame {
Checkbox t1=new Checkbox("Visual Basic");
Checkbox t2=new Checkbox("Visual C++");
Checkbox t3=new Checkbox("Java");
CheckboxGroup cg=new CheckboxGroup();
Checkbox r1=new Checkbox("专科 ",cg,false);
Checkbox r2=new Checkbox("本科 ",cg,false);
Checkbox r3=new Checkbox("硕士 ",cg,false);
Checkbox r4=new Checkbox("博士 ",cg,false);
Label lb1=new Label("您的学历为," );
Label lb2=new Label("您精通的语言为," );
新建复选框新建一个复选框组添加单选按钮
public Qualification(String s ) {
super(s);setLayout(new GridLayout(10,1));
add(lb1);add(r1);add(r2);add(r3); add(r4);
add(lb2);add(t1);add(t2);add(t3);
}
public static void main(String args[]) {
Qualification q=new Qualification ("学识 ! ");
q.setSize(400,250);
q.show( );
}
}
将单选按钮添加到窗体将复选框添加到窗体
Designed by Chiyong,?200521
选择框
用 Choice 类可以创建一个选择框
Choice moviestars = new Choice( );
通过 addItem() 方法可以添加项目
moviestars.addItem("安东尼奥,班德拉斯 ");
moviestars.addItem("莱昂纳多,迪卡普尼奥 ");
moviestars.addItem("桑德,布洛克 ");
moviestars.addItem("休,葛兰特 ");
moviestars.addItem("朱莉亚,罗萡茨 ");
用来向用户显示一个选择列表
Designed by Chiyong,?200522
布局管理器为什么要使用布局管理器?
布局管理器被用来在目标屏幕上显示组件的功能类。
Java 是平台无关的,必须使用一种不依赖于平台的组件显示方法。
它使用 相对位置 系统的概念。
awt提供一组用来进行布局管理的类,称为布局管理器 或 布局 。所有布局都实现
LayoutManager接口。
Designed by Chiyong,?200523
布局类型
Java中的布局类型主要包括以下几种:
- FlowLayout( 流水式布局)
- BorderLayout (边界布局)
- GridLayout(网格布局)
- GridBagLayout(网格袋布局)
- CardLayout (卡片布局)
- 此外最新 JDK以及第三方类库还支持
BoxLayout,SpringLayout,ViewPortLayout,
OverlayLayout,null等布局
Designed by Chiyong,?200524
如何设置布局
每个容器( Container对象)都有一个与它相关的缺省的布局管理器。
- Panel类(及其子类) 的缺省布局是
FlowLayout
- Frame类的缺省布局是 BorderLayout
在没有设置新的布局前,在容器中添加组件都按照该容器的缺省布局排列。
可以通过 setLayout( )方法为容器设置新的布局。
Designed by Chiyong,?200525
FlowLayout
FlowLayout的构造函数有:
- FlowLayout( ):生成一个默认的流式布局
- FlowLayout(int alignment):可以设定每一行组件的对齐方式
- FlowLayout(int alignment,int horz,int vert):可以设定组件间的水平和垂直距离
Applet和面板的缺省布局
组件从左上角开始按从左到右、从上到下的方式排列
FlowLayout mylayout = new FlowLayout();
FlowLayout exLayout = new
FlowLayout(FlowLayout.RIGHT);
setLayout(exlayout); // 为容器设置新布局
Designed by Chiyong,?200526
BorderLayout 2-1
下面是 BorderLayout所定义的构造函数:
- BorderLayout( ):生成默认的边界布局
- BorderLayout(int horz,int vert),可以设定组件间的水平和垂直距离
窗口,框架和对话框等的缺省布局
组件可被置于容器的北、南、东、西或中间位置
Designed by Chiyong,?200527
BorderLayout 2-2
BorderLayout 类定义了几个常量值以指定相应区域:
- BorderLayout.NORTH – 对应容器的顶部
- BorderLayout.EAST – 对应容器的右部
- BorderLayout.SOUTH – 对应容器的底部
- BorderLayout.WEST – 对应容器的左部
- BorderLayout.CENTER – 对应容器的中部
加入组件方法:
void add(Component Obj,int region);
.,,
setLayout(new BorderLayout());
Button btnEast=new Button("东 ");
Button btnWest=new Button("西 ");
Button btnNorth=new Button("北 ");
Button btnSouth=new Button("南 ");
Button btnCenter=new Button("中 ");
add(btnEast,BorderLayout.EAST);
add(btnWest,BorderLayout.WEST);
add(btnNorth,BorderLayout.NORTH);
add(btnSouth,BorderLayout.SOUTH);
add(btnCenter,BorderLayout.CENTER);
.,,
Designed by Chiyong,?200528
GridLayout
GridLayout的构造函数如下所示:
- GridLayout():生成一个单列的网格布局
- GridLayout(int row,int col):生成一个设定行数和列数的网格布局
- GridLayout(int row,int col,int horz,int vert),可以设置组件之间的水平和垂直间隔
用于将容器区域划分为一个矩形网格
组件按行和列排列
.,,
Button btn[]; // 声明按钮数组
String str[]={"1","2","3","4","5","6","7","8","9"};
setLayout(new GridLayout(3,3));
btn=new Button[str.length]; // 创建按钮数组
for(int i=0;i<str.length;i++){
btn[i]=new Button(str[i]); add(btn[i]);
}
Designed by Chiyong,?200529
GridBagLayout
通过使用以下语法容器可获得 GridBagLayout:
GridBagLayout gb=new GridBagLayout();
ContainerName.setLayout(gb);
要使用此布局,必须提供各组件的大小和布局等信息。
GridBagConstraints 类中包含 GridBagLayout
类用来定位及调整组件大小所需的全部信息。
组件大小不必相同
组件按行和列排列
放置顺序不一定为从左至右和由上至下
Designed by Chiyong,?200530
GridBagConstraints 类 2-1
成员变量列表:
- gridx,gridy,指定组件放置于哪个单元中
- gridwidth,gridheight,指定组件将占用多少行和多少列
- weightx,weighty,指定在一个 GridBagLayout
中应如何分配空间,这些变量的缺省值为 0
- ipadx,ipady,指定组件的最小高度和宽度
Designed by Chiyong,?200531
成员变量列表:
- fill,指定在单元大于组件的情况下,组件如何填充此单元,共有 4可选值。缺省值为:
GridBagConstraints.NONE
- anchor,指定将组件放置在单元中的位置,
共有 9个可选值。缺省值为:
GridBagConstraints.CENTER
GridBagConstraints 类 2-2
Designed by Chiyong,?200532
CardLayout
可存储几个不同的布局。
每个布局就像是一个卡片组中的一张卡片。
在一个给定的时间总会有一张卡片在顶层。
卡片通常为一个 Panel 对象。
每当需要许多面板切换,而每个面板需要显示为不同布局时,可以使用卡片布局。
CardLayout布局见示例。
Designed by Chiyong,?200533
总结 3-1
抽象窗口工具包( AWT) 是一组类,它允许创建图形用户界面,并能够通过键盘和鼠标响应用户的操作。
容器指可以存放组件的区域,两种常用容器类:框架( Frame类)和面板( Panel类)。
框架是一个单独的窗口,而面板只是包含在窗口中的一个区域。
AWT支持下列类型的组件:标签、文本域、
文本区、按钮、复选框、列表框等。
Designed by Chiyong,?200534
总结 3-2
布局管理器类提供控制 GUI 组件物理布局的一种方式。
以下是几种不同类型的布局:
- FlowLayout
- BorderLayout
- CardLayout
- GridLayout
- GridBagLayout
布局可通过 setLayout( ) 方法进行设置。
Designed by Chiyong,?200535
总结 3-3
FlowLayout 是 Applet 和 面板的缺省布局管理器。组件从左上角到右下角进行排列。
BorderLayout按北、南、东、西、中的不同区域划分将组件排列于容器中。
GridLayout 将组件按行和列排列。所有组件大小相同。
GridBagLayout 能将组件放置在最精确的位置。各组件的大小可以不同。
CardLayout可存储几个不同的布局管理器
Designed by Chiyong,?200536
Java2 网络编程基础
GUI 编程第六章
Designed by Chiyong,?20052
回顾
运行时发生的错误称为异常。
Java 使用 try 和 catch 块来处理异常。 try
块中的语句引发异常,而 catch 块则处理异常。
可以同时使用多个 catch 块来分别处理各种异常类型。
关键字 throws 用于列出一个方法可能引发的异常类型。
Java 中的垃圾收集就是将分配给对象但不再使用的内存回收或释放的过程。
Designed by Chiyong,?20053
目标
了解 AWT 包及其组件
掌握如何创建 GUI 程序
掌握 AWT 组件的基本用法
掌握如何使用布局管理器构造复杂的布局
Designed by Chiyong,?20054
抽象窗口工具包 (AWT包 )
图形用户界面 (GUI)可以通过键盘或鼠标来响应用户的操作。
抽象窗口工具包 (AWT,Abstract Window
Toolkit)是一组 Java类,此组 Java类允许创建图形用户界面 (GUI)。
AWT提供了用以生成生动而高效的 GUI的各种 组件,事件处理 的系统和安排组件来实现平台无关性的机制 ( 布局管理器 ) 。
Designed by Chiyong,?20055
applet 在不同平台上的显示平台 A 平台 B
applet applet
没有办法来确定 applet 在屏幕上的位置,所以 applet
在不同的平台上运行时,可能显示在不同的位置,这依赖与该系统的坐标系统。
(0,0) (0,0)坐标系统 坐标系统
Designed by Chiyong,?20056
摆放组件时的问题
跟前面的图所看到的一样,在不同的屏幕上对象的摆放将呈现不同的位置。
按 绝对坐标 在屏幕上摆放组件,将在不同屏幕上显示时产生问题。这是因为不同的屏幕使用不同的布局系统。因此为了处理这个组织组件的难题,Java使用了容器 Containers
和布局管理器 Layout Managers (实际上是
java.awt包中的 布局类 )。
Designed by Chiyong,?20057
容器
容器 是可以存放组件的区域。可对组件分组,或在容器上进行绘制和着色。
java.awt包中的 Container类可直接或间接派生出两个常用容器:框架( Frame类)
和面板( Panel类)。
框架是一个带有边框的独立的窗口。
面板是包含在窗口中的一个不带边框的区域。
Designed by Chiyong,?20058
了解 java.awt 包中的类体系结构
Component
Button Checkbox Container Choice Canvas
TextComponent
Label
Panel Window
Applet Frame Dialog
TextArea TextFieldScrollPane
MenuComponent
Object
Designed by Chiyong,?20059
容器 – 框架
框架 是一个具有完全功能的窗体,并带有自己的标题和图标。
可以通过以下任一构造函数来创建:
– Frame():创建一个不含标题的标准窗口
– Frame(String Title),创建一个含有标题的窗口,
这个标题是由参数 title指定的。
当一个 Frame窗口被创建以后,需要调用
setSize()方法来设置窗口的大小,并调用
setVisible()来显示窗口。
Dialog,可看成是 pop-up window,当错误发生时将弹出来显示错误消息。它不象 Frame是一个完全功能的窗体
Designed by Chiyong,?200510
容器 - 面板
面板 是一个纯粹的容器,它本身并不是 Window,
它的唯一作用就是用来组织窗体上的组件。
最简单的创建面板的方式就是通过面板的构造函数 Panel() 来进行。
必须将面板添加到窗体中。
ScrollPane,一个带滚动栏的窗体可以显示屏幕放不下的内容。
Designed by Chiyong,?200511
使用容器示例
import java.awt.*;
class PanelTest extends Panel {
public static void main(String args[]) {
PanelTest p= new PanelTest();
Frame f=new Frame("正在测试面板 ! ");
f.add(p);
f.setSize(300,200);
f.setVisible(true);
}
}
使用 GUI组件必须导入该包将面板添加到框架窗体中
Designed by Chiyong,?200512
AWT组件
组件指可以放置在用户界面上的任何东西,
可以将组件设置为可见或重新调整其大小。
AWT支持的组件:标签、文本域、文本区、
按钮、复选框、选择框等。
高级组件包括滚动条、滚动窗格和对话框。
向窗口加入一个组件:首先生成所需组件的实例,然后调用 add()方法,此方法是在
Container类中定义的。
Designed by Chiyong,?200513
不同组件标签文本域复选框单选按钮文本区按钮
Designed by Chiyong,?200514
文本域
可以通过以下任一构造函数来创建:
- TextField(),新建一个 文本域
- TextField(int columns),新建一个包含给定列数的 文本域
- TextField(String s),新建一个包含给定字符串的 文本域
- TextField(String s,int columns),新建一个包含给定字符串和列数的 文本域
一种用来输入文本的 GUI组件
只能接受一行输入
Designed by Chiyong,?200515
标签和文本域使用示例
import java.awt.*;
class TextLabelDemo extends Frame {
Label lblName=new Label(“名称,” );
TextField txtName=new TextField(20);
public TextLabelDemo (String title) {
super(title);
setLayout(new FlowLayout());
add(lblName);
add(txtName);
}
public static void main(String args[]) {
TextLabelDemo t=new TextLabelDemo("正在测试组件 ! ");
t.setSize(300,200); t.setVisible(true);
}
}
新建一个标签新建一个文本域添加到窗口
Designed by Chiyong,?200516
文本区
可以通过以下构造函数来创建:
- TextArea( ),新建一个 文本区
- TextArea(int rows,int cols),新建一个包含给定行数和列数的 文本区
- TextArea(String text,int rows,int
cols),新建一个包含给定字符串、行数和列数的 文本区
要接受输入多行文本时使用
可以包括滚动条
.,,
TextArea txtComment=new TextArea();
add(txtComment);
.,,
Designed by Chiyong,?200517
按钮
可以使用以下任一构造函数来创建按钮:
- Button(),新建一个空的 按钮
- Button(String text),新建一个包含给定字符串的 按钮
按钮是任何 GUI都 不可或缺的组件
用来捕捉用户操作的最为简便的方式
.,,
Button btnOk=new Button("确定 ! ");
Button btnCancel=new Button("取消 ! ");
add(btnOk);
add(btnCancel);
.,,
Designed by Chiyong,?200518
复选框
可以使用以下任一构造函数来创建复选框:
- Checkbox(),创建一个空的复选框,且未被选中
- Checkbox(String text),创建一个用给定字符串作为标签的复选框,且未被选中
- Checkbox(String text,Boolean on),创建一个标签由参数 text指定的复选框,允许通过参数
on设定复选框的初始状态。
用于多选项的用户输入,用户可以通过单击复选框来选定或取消选定某选项。
Designed by Chiyong,?200519
单选按钮
可以通过复选框组生成一系列互斥的复选框,实现单选按钮功能。
在一组单选按钮中只能选择一个按钮。
首先创建一个 CheckboxGroup 对象。
CheckboxGroup cg=new CheckboxGroup();
然后再创建各单选按钮。
Checkbox male=Checkbox("男 ",cg,true);
Checkbox female=Checkbox("女 ",cg,false);
Designed by Chiyong,?200520
复选框和单选按钮使用示例
import java.awt.*;
class Qualification extends Frame {
Checkbox t1=new Checkbox("Visual Basic");
Checkbox t2=new Checkbox("Visual C++");
Checkbox t3=new Checkbox("Java");
CheckboxGroup cg=new CheckboxGroup();
Checkbox r1=new Checkbox("专科 ",cg,false);
Checkbox r2=new Checkbox("本科 ",cg,false);
Checkbox r3=new Checkbox("硕士 ",cg,false);
Checkbox r4=new Checkbox("博士 ",cg,false);
Label lb1=new Label("您的学历为," );
Label lb2=new Label("您精通的语言为," );
新建复选框新建一个复选框组添加单选按钮
public Qualification(String s ) {
super(s);setLayout(new GridLayout(10,1));
add(lb1);add(r1);add(r2);add(r3); add(r4);
add(lb2);add(t1);add(t2);add(t3);
}
public static void main(String args[]) {
Qualification q=new Qualification ("学识 ! ");
q.setSize(400,250);
q.show( );
}
}
将单选按钮添加到窗体将复选框添加到窗体
Designed by Chiyong,?200521
选择框
用 Choice 类可以创建一个选择框
Choice moviestars = new Choice( );
通过 addItem() 方法可以添加项目
moviestars.addItem("安东尼奥,班德拉斯 ");
moviestars.addItem("莱昂纳多,迪卡普尼奥 ");
moviestars.addItem("桑德,布洛克 ");
moviestars.addItem("休,葛兰特 ");
moviestars.addItem("朱莉亚,罗萡茨 ");
用来向用户显示一个选择列表
Designed by Chiyong,?200522
布局管理器为什么要使用布局管理器?
布局管理器被用来在目标屏幕上显示组件的功能类。
Java 是平台无关的,必须使用一种不依赖于平台的组件显示方法。
它使用 相对位置 系统的概念。
awt提供一组用来进行布局管理的类,称为布局管理器 或 布局 。所有布局都实现
LayoutManager接口。
Designed by Chiyong,?200523
布局类型
Java中的布局类型主要包括以下几种:
- FlowLayout( 流水式布局)
- BorderLayout (边界布局)
- GridLayout(网格布局)
- GridBagLayout(网格袋布局)
- CardLayout (卡片布局)
- 此外最新 JDK以及第三方类库还支持
BoxLayout,SpringLayout,ViewPortLayout,
OverlayLayout,null等布局
Designed by Chiyong,?200524
如何设置布局
每个容器( Container对象)都有一个与它相关的缺省的布局管理器。
- Panel类(及其子类) 的缺省布局是
FlowLayout
- Frame类的缺省布局是 BorderLayout
在没有设置新的布局前,在容器中添加组件都按照该容器的缺省布局排列。
可以通过 setLayout( )方法为容器设置新的布局。
Designed by Chiyong,?200525
FlowLayout
FlowLayout的构造函数有:
- FlowLayout( ):生成一个默认的流式布局
- FlowLayout(int alignment):可以设定每一行组件的对齐方式
- FlowLayout(int alignment,int horz,int vert):可以设定组件间的水平和垂直距离
Applet和面板的缺省布局
组件从左上角开始按从左到右、从上到下的方式排列
FlowLayout mylayout = new FlowLayout();
FlowLayout exLayout = new
FlowLayout(FlowLayout.RIGHT);
setLayout(exlayout); // 为容器设置新布局
Designed by Chiyong,?200526
BorderLayout 2-1
下面是 BorderLayout所定义的构造函数:
- BorderLayout( ):生成默认的边界布局
- BorderLayout(int horz,int vert),可以设定组件间的水平和垂直距离
窗口,框架和对话框等的缺省布局
组件可被置于容器的北、南、东、西或中间位置
Designed by Chiyong,?200527
BorderLayout 2-2
BorderLayout 类定义了几个常量值以指定相应区域:
- BorderLayout.NORTH – 对应容器的顶部
- BorderLayout.EAST – 对应容器的右部
- BorderLayout.SOUTH – 对应容器的底部
- BorderLayout.WEST – 对应容器的左部
- BorderLayout.CENTER – 对应容器的中部
加入组件方法:
void add(Component Obj,int region);
.,,
setLayout(new BorderLayout());
Button btnEast=new Button("东 ");
Button btnWest=new Button("西 ");
Button btnNorth=new Button("北 ");
Button btnSouth=new Button("南 ");
Button btnCenter=new Button("中 ");
add(btnEast,BorderLayout.EAST);
add(btnWest,BorderLayout.WEST);
add(btnNorth,BorderLayout.NORTH);
add(btnSouth,BorderLayout.SOUTH);
add(btnCenter,BorderLayout.CENTER);
.,,
Designed by Chiyong,?200528
GridLayout
GridLayout的构造函数如下所示:
- GridLayout():生成一个单列的网格布局
- GridLayout(int row,int col):生成一个设定行数和列数的网格布局
- GridLayout(int row,int col,int horz,int vert),可以设置组件之间的水平和垂直间隔
用于将容器区域划分为一个矩形网格
组件按行和列排列
.,,
Button btn[]; // 声明按钮数组
String str[]={"1","2","3","4","5","6","7","8","9"};
setLayout(new GridLayout(3,3));
btn=new Button[str.length]; // 创建按钮数组
for(int i=0;i<str.length;i++){
btn[i]=new Button(str[i]); add(btn[i]);
}
Designed by Chiyong,?200529
GridBagLayout
通过使用以下语法容器可获得 GridBagLayout:
GridBagLayout gb=new GridBagLayout();
ContainerName.setLayout(gb);
要使用此布局,必须提供各组件的大小和布局等信息。
GridBagConstraints 类中包含 GridBagLayout
类用来定位及调整组件大小所需的全部信息。
组件大小不必相同
组件按行和列排列
放置顺序不一定为从左至右和由上至下
Designed by Chiyong,?200530
GridBagConstraints 类 2-1
成员变量列表:
- gridx,gridy,指定组件放置于哪个单元中
- gridwidth,gridheight,指定组件将占用多少行和多少列
- weightx,weighty,指定在一个 GridBagLayout
中应如何分配空间,这些变量的缺省值为 0
- ipadx,ipady,指定组件的最小高度和宽度
Designed by Chiyong,?200531
成员变量列表:
- fill,指定在单元大于组件的情况下,组件如何填充此单元,共有 4可选值。缺省值为:
GridBagConstraints.NONE
- anchor,指定将组件放置在单元中的位置,
共有 9个可选值。缺省值为:
GridBagConstraints.CENTER
GridBagConstraints 类 2-2
Designed by Chiyong,?200532
CardLayout
可存储几个不同的布局。
每个布局就像是一个卡片组中的一张卡片。
在一个给定的时间总会有一张卡片在顶层。
卡片通常为一个 Panel 对象。
每当需要许多面板切换,而每个面板需要显示为不同布局时,可以使用卡片布局。
CardLayout布局见示例。
Designed by Chiyong,?200533
总结 3-1
抽象窗口工具包( AWT) 是一组类,它允许创建图形用户界面,并能够通过键盘和鼠标响应用户的操作。
容器指可以存放组件的区域,两种常用容器类:框架( Frame类)和面板( Panel类)。
框架是一个单独的窗口,而面板只是包含在窗口中的一个区域。
AWT支持下列类型的组件:标签、文本域、
文本区、按钮、复选框、列表框等。
Designed by Chiyong,?200534
总结 3-2
布局管理器类提供控制 GUI 组件物理布局的一种方式。
以下是几种不同类型的布局:
- FlowLayout
- BorderLayout
- CardLayout
- GridLayout
- GridBagLayout
布局可通过 setLayout( ) 方法进行设置。
Designed by Chiyong,?200535
总结 3-3
FlowLayout 是 Applet 和 面板的缺省布局管理器。组件从左上角到右下角进行排列。
BorderLayout按北、南、东、西、中的不同区域划分将组件排列于容器中。
GridLayout 将组件按行和列排列。所有组件大小相同。
GridBagLayout 能将组件放置在最精确的位置。各组件的大小可以不同。
CardLayout可存储几个不同的布局管理器
Designed by Chiyong,?200536