GUI程序设计
用户界面的需要
用户界面的类型
字符用户界面(CUI),例如MS-DOS
图形用户界面(GUI,Graphical User Interface )是指以图形化方式与用户进行交互的程序运行界面,例如Microsoft Windows、Word等。
组件(Component)是GUI的基本组成元素,凡是能够以图形化方式显示在屏幕上并能与用户交互的对象均为组件。
在JDK的java.awt包中定义了多种GUI组件类,如Window、Menu、Button、Label、TextField、Scrollbar等。
组件
基本的控制组件,例如:Button、Label等。
容器(Container):能容纳和排列组件的组件
Container类描述了容器组件的所有性质;
它继承于Component类,因此容器类对象本身也是一个组件,具有组件的所有性质,但反过来组件却不一定是容器;
控制组件要想显示出来必须放置在容器组件中
在AWT中存在两种主要的容器类型:
java.awt.Window
描述的是一个没有边框和菜单栏、可自由停靠的顶层容器(是指不允许将其包含于其他的容器中),一般不直接使用该类,而是使用其子类Frame。
java.awt.Panel
最简单而常用的容器,可作为容器包含其他组件,但不能独立存在,必须被添加到其它容器中。
示例1:第一个GUI应用程序。
import java.awt.*;
class TestFirstFrame{
public static void main(String args[]){
Frame frame=new Frame("第一个图形用户界面应用程序");
Label lbl=new Label("这是我的第一个图形用户界面!");
lbl.setBackground(Color.pink);
frame.setLayout(new FlowLayout());
frame.add(lbl);
frame.setSize(200,100);
frame.setVisible(true);
}
}
Frame 默认的大小为刚好容纳下标题条和最小(大)化、关闭按钮,setSize()可设置Frame大小。
Frame窗口默认是不可见的,可使用setVisible(true|false)方法使之可见或隐藏。
组件在容器中的摆放位置由布局管理器决定,Frame使用setLayout()方法可以设置窗口的布局。
FlowLayout—流式布局管理,特点是组件在容器中按照加入次序逐行定位,行内从左到右,一行排满后换行。
示例2:容器组件Panel的使用。
Frame frame=new Frame("容器Panel的使用");
Panel panel=new Panel();
Button btn=new Button("确定");
panel.setBackground(Color.cyan);
panel.setSize(100,50);
panel.setLocation(40,40);
frame.setLayout(null);
frame.add(panel);
panel.add(btn);
frame.setLocation(80,100);
frame.setSize(200,100);
frame.setVisible(true);
frame的默认布局理器被取消,人工设置了panel的尺寸大小和在容器中的位置;
setSize()方法用于设置组件尺寸大小,即宽度和高度,单位为像素;
setLocation()方法用于设置组件在容器中的位置,即组件的左上角,即组件的左上角顶点坐标,单位也是像素。
各个GUI容器都拥有自己的坐标系统(计算机的显示器屏幕也是一种GUI容器)
容器对其中所包含组件的排列方式,包括组件的位置和大小的设定,被称为容器的布局(Layout)。
布局管理器:指系统事先定义好的若干容器布局效果,使用它们可以方便地实现组件在容器的布局管理,并能够满足各种常规需要。例如,FlowLayout等
每一个容器都有默认的布局管理器,在创建一个容器对象时,同时也会创建一个相应的默认布局管理器对象,用户也可以随时为容器创建和设置新的布局管理器。
容器对象.setLayout(布局管理器对象)
布局管理器 容器对象.getLayout()
常用布局管理器
FlowLayout:流式布局,是Panel(及其子类)类型容器的默认布局管理器类型。
布局效果:组件在容器中按照加入次序逐行定位,行内从左到右,一行排满后换行。组件按原始大小进行显示。
构造方法
public FlowLayout()
public FlowLayout(int align)
public FlowLayout(int align,int hgap,int vgap)
对齐方式可以使用FlowLayout类中定义静态常量来设定,主要包括:
FlowLayout.LEFT 左对齐
FlowLayout.RIGHT 右对齐
FlowLayout.CENTER 居中对齐
示例1:流式布局的使用。
f.setLayout(new FlowLayout());
f.add(button1);
f.add(button2);
f.add(button3);
注意:当容器f的尺寸被重置时,其中组件的位置也随之进行了调整,但组件的尺寸维持不变。
BorderLayout:边界布局,是Window及其子类类型容器的默认布局管理器。
布局效果:将整个容器范围划分成East、West、South、North、Center五个区域,组件只能被添加到指定的区域。
在使用边界布局的容器中,组件的尺寸也被布局管理器强行控制,即与其所在区域的尺寸相同。
构造方法
public BorderLayout()
public BorderLayout(int hgap,int vgap)
示例2:BorderLayout的使用。
f.setLayout(new BorderLayout());
f.add(btnNorth,"North");
f.add(btnSouth,"South");
f.add(btnWest,"West");
f.add(btnEast,"East");
f.add(btnCenter,"Center");
注意:
当容器的尺寸发生变化时,其中各组件相对位置不变,尺寸随所在区域进行缩放调整;
调整原则:北、南两个区域只能在水平方向缩放(宽度可调),东、西两个区域只能在垂直方向缩放(高度可调),中部区域都可缩放。
用户界面的需要
用户界面的类型
字符用户界面(CUI),例如MS-DOS
图形用户界面(GUI,Graphical User Interface )是指以图形化方式与用户进行交互的程序运行界面,例如Microsoft Windows、Word等。

组件(Component)是GUI的基本组成元素,凡是能够以图形化方式显示在屏幕上并能与用户交互的对象均为组件。
在JDK的java.awt包中定义了多种GUI组件类,如Window、Menu、Button、Label、TextField、Scrollbar等。

组件
基本的控制组件,例如:Button、Label等。
容器(Container):能容纳和排列组件的组件
Container类描述了容器组件的所有性质;
它继承于Component类,因此容器类对象本身也是一个组件,具有组件的所有性质,但反过来组件却不一定是容器;
控制组件要想显示出来必须放置在容器组件中
在AWT中存在两种主要的容器类型:
java.awt.Window
描述的是一个没有边框和菜单栏、可自由停靠的顶层容器(是指不允许将其包含于其他的容器中),一般不直接使用该类,而是使用其子类Frame。
java.awt.Panel
最简单而常用的容器,可作为容器包含其他组件,但不能独立存在,必须被添加到其它容器中。
示例1:第一个GUI应用程序。
import java.awt.*;
class TestFirstFrame{
public static void main(String args[]){
Frame frame=new Frame("第一个图形用户界面应用程序");
Label lbl=new Label("这是我的第一个图形用户界面!");
lbl.setBackground(Color.pink);
frame.setLayout(new FlowLayout());
frame.add(lbl);
frame.setSize(200,100);
frame.setVisible(true);
}
}
Frame 默认的大小为刚好容纳下标题条和最小(大)化、关闭按钮,setSize()可设置Frame大小。
Frame窗口默认是不可见的,可使用setVisible(true|false)方法使之可见或隐藏。
组件在容器中的摆放位置由布局管理器决定,Frame使用setLayout()方法可以设置窗口的布局。
FlowLayout—流式布局管理,特点是组件在容器中按照加入次序逐行定位,行内从左到右,一行排满后换行。
示例2:容器组件Panel的使用。
Frame frame=new Frame("容器Panel的使用");
Panel panel=new Panel();
Button btn=new Button("确定");
panel.setBackground(Color.cyan);
panel.setSize(100,50);
panel.setLocation(40,40);
frame.setLayout(null);
frame.add(panel);
panel.add(btn);
frame.setLocation(80,100);
frame.setSize(200,100);
frame.setVisible(true);
frame的默认布局理器被取消,人工设置了panel的尺寸大小和在容器中的位置;
setSize()方法用于设置组件尺寸大小,即宽度和高度,单位为像素;
setLocation()方法用于设置组件在容器中的位置,即组件的左上角,即组件的左上角顶点坐标,单位也是像素。
各个GUI容器都拥有自己的坐标系统(计算机的显示器屏幕也是一种GUI容器)

容器对其中所包含组件的排列方式,包括组件的位置和大小的设定,被称为容器的布局(Layout)。
布局管理器:指系统事先定义好的若干容器布局效果,使用它们可以方便地实现组件在容器的布局管理,并能够满足各种常规需要。例如,FlowLayout等
每一个容器都有默认的布局管理器,在创建一个容器对象时,同时也会创建一个相应的默认布局管理器对象,用户也可以随时为容器创建和设置新的布局管理器。
容器对象.setLayout(布局管理器对象)
布局管理器 容器对象.getLayout()
常用布局管理器
FlowLayout:流式布局,是Panel(及其子类)类型容器的默认布局管理器类型。
布局效果:组件在容器中按照加入次序逐行定位,行内从左到右,一行排满后换行。组件按原始大小进行显示。
构造方法
public FlowLayout()
public FlowLayout(int align)
public FlowLayout(int align,int hgap,int vgap)
对齐方式可以使用FlowLayout类中定义静态常量来设定,主要包括:
FlowLayout.LEFT 左对齐
FlowLayout.RIGHT 右对齐
FlowLayout.CENTER 居中对齐
示例1:流式布局的使用。
f.setLayout(new FlowLayout());
f.add(button1);
f.add(button2);
f.add(button3);

注意:当容器f的尺寸被重置时,其中组件的位置也随之进行了调整,但组件的尺寸维持不变。
BorderLayout:边界布局,是Window及其子类类型容器的默认布局管理器。
布局效果:将整个容器范围划分成East、West、South、North、Center五个区域,组件只能被添加到指定的区域。

在使用边界布局的容器中,组件的尺寸也被布局管理器强行控制,即与其所在区域的尺寸相同。
构造方法
public BorderLayout()
public BorderLayout(int hgap,int vgap)
示例2:BorderLayout的使用。
f.setLayout(new BorderLayout());
f.add(btnNorth,"North");
f.add(btnSouth,"South");
f.add(btnWest,"West");
f.add(btnEast,"East");
f.add(btnCenter,"Center");

注意:
当容器的尺寸发生变化时,其中各组件相对位置不变,尺寸随所在区域进行缩放调整;
调整原则:北、南两个区域只能在水平方向缩放(宽度可调),东、西两个区域只能在垂直方向缩放(高度可调),中部区域都可缩放。