1.29k likes | 1.47k Views
第十一章. 图形用户界面设计. 图形用户界面设计. 11.1 AWT 组件概述 11.2 布局管理 11.3 事件处理. 11.1 AWT 组件概述. 早期的 JDK 版本中提供了 Java 抽象窗口工具集 (Abstract Window Toolkit, AWT) ,其目的是为程序员创建图形用户界面提供支持。 AWT 组件定义在 java.awt 包中,包括组件类、组件布局类等 。. Java.awt 的继承关系. 1 .组件.
E N D
第十一章 图形用户界面设计
图形用户界面设计 • 11.1 AWT组件概述 • 11.2 布局管理 • 11.3 事件处理
11.1 AWT组件概述 早期的JDK版本中提供了Java抽象窗口工具集(Abstract Window Toolkit, AWT),其目的是为程序员创建图形用户界面提供支持。AWT组件定义在java.awt包中,包括组件类、组件布局类等 。
1.组件 组件(component)是构成图形用户界面的基本成分和核心元素。组件类(Component)是一个抽象类,是AWT组件类层次结构的根类,实际使用的组件都是Component类的子类。Component类提供对组件操作的通用方法,包括设置组件位置、设置组件大小、设置组件字体、响应鼠标或键盘事件、组件重绘等。
2.容器 容器(container)是一种特殊组件,它能容纳其他组件。它在可视区域内显示其它组件。容器是组件,在容器之中还可以放置其它容器,可以使用多层容器构成富于变化的界面。
3.窗口与面板 容器有2种:窗口(window)和面板(panel)。 窗口可独立存在,可被移动,也可被最大化和最小化,有标题栏、边框,可添加菜单栏。 面板不能独立存在,必须包含在另一个容器中。 面板没有标题,没有边框,不可添加菜单栏。 一个窗口可以包含多个面板,一个面板也可以包含另一个面板,但面板不能包含窗口。 窗口类Window和面板类Panel都是容器类Container的子类。
4.框架与对话框 窗口类Window主要有2个子类:框架类(Frame)和对话框类(Dialog)。
框架(Frame) • 框架(frame)是一种带标题栏并且可以改变大小的窗口。 • 应用程序中,使用框架作为容器,在框架中放置组件。 • 框架类在实例化时默认是最小化的、不可见的,必须通过setSize()方法设置框架大小,通过setVisible(true)方法使框架可见。
对话框(dialog) • 对话框(dialog)也是一种可移动的窗口,它比框架简单,没有太多的控制元素,如最大化按钮、状态栏等。 • 对话框不能作为应用程序的主窗口,它依赖于一个框架窗口而存在,当框架窗口关闭时,对话框也关闭。 • 对话框类Dialog的构造方法必须声明对话框所依赖的框架窗口。
例--创建窗口 import java.awt.*; class FrmApp { static Frame fra=new Frame("FrmApp"); public static void main(String args[]) { fra.setSize(250,150); fra.setLocation(100,200); fra.setVisible(true); System.out.println("State:"+fra.getState()); System.out.println("Title:"+fra.getTitle()); System.out.println("Visible:"+fra.isVisible()); } }
程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息: State:0 Title:FrmApp Visible:true
5.标签 标签类(Label)组件用于显示一行文本信息。标签只能显示信息,不能用于输入。
例--在窗口中建立1个标签 import java.awt.*; class LabApp { public static void main(String args[]) { Frame fra=new Frame("LabApp"); Label lab=new Label(); //创建1个空标签 fra.setSize(250,150); lab.setText("This is a label"); //为标签添加标题 lab.setAlignment(Label.CENTER); lab.setBackground(Color.white); //引用Component类的方法设置标签背景颜色
lab.setForeground(Color.black); //引用Component类的方法设置标签标题颜色 Font fnt=new Font("Serief", Font.ITALIC+Font.BOLD,22); lab.setFont(fnt); fra.add(lab); fra.setVisible(true); } }
6.按钮 按钮是最常见的一种组件,用来控制程序运行的方向。用户单击按钮时,计算机将执行一系列命令,完成一定的功能。 按钮通过java.awt包的Button类创建。
例--在窗口中建立一个按钮 import java.awt.*; class Buttapp { public static void main(String args[]) { Frame fra=new Frame("ButtApp"); fra.setSize(250,170); fra.setLayout(null); //关闭页面设置 Button butt=new Button("click"); butt.setSize(100,50); butt.setLocation(75,60); fra.add(butt); fra.setVisible(true); } }
7.文本编辑组件 文本编辑组件有文本行和文本区。 文本行是一个单行文本编辑框,用于输入一行文字。文本行由java.awt包中的TextField类来创建。
例--创建文本行 import java.awt.*; class TextApp { public static void main(String args[]) { Frame fra=new Frame("文本框程序"); TextField txt1=new TextField(50); TextField txt2=new TextField("Text Field", 50); fra.setBounds(0,0,300,200); fra.setLayout(null); txt1.setBounds(50,50,130,20); //设置文本框的大小 txt2.setBounds(50,100,130,30); fra.add(txt1); fra.add(txt2); fra.setVisible(true); } }
11.2 布局管理 Java提供了多种风格和特点的布局管理器,每一种布局管理器指定一种组件相对位置和大小布局。布局管理器是容器类所具有的特性,每种容器都有一种默认的布局管理器。
11.2 布局管理 在java.awt包中共提供了5个布局管理器类: • FlowLayout • BorderLayout • CardLayout • GridLayout • GridBagLayout 每个类都是java.lang.Object类的子类。
11.2.1 BorderLayout类 BorderLayout(边布局)的布局策略是把容器内的空间划分为东、西、南、北、中5个区域,这5个区域分别用英文的East、West、South、North、Center表示。向容器中加入每个组件都要指明它放在容器的哪个区域。如果某个区域没有分配组件,则其他组件可以占据它的空间。
例--应用BorderLayout布局 在窗口中加入5个按钮,采用BorderLayout布局。 import java.awt.*; class BorLay { public static void main(String args[]) { Frame frm=new Frame("BorderLayout"); BorderLayout layout=new BorderLayout(5,7); frm.setBounds(0,0,300,200); frm.setLayout(layout); Button butN,butS,butW,butE,butC; butN=new Button("north button"); butS=new Button("south button");
butW=new Button("west button"); butE=new Button("east button"); butC=new Button("center button"); frm.add(butN, BorderLayout.NORTH); frm.add(butS, BorderLayout.SOUTH); frm.add(butW, BorderLayout.WEST); frm.add(butE, BorderLayout.EAST); frm.add(butC, BorderLayout.CENTER); frm.setVisible(true); } }
11.2.2 FlowLayout FlowLayout(流式布局)的布局策略提供按行布局组件方式,将组件按照加入的先后顺序从左向右排列,当一行排满之后转到下一行继续按照从左向右的顺序排列。组件保持自己的尺寸,一行能容纳的组件的数目随容器的宽度变化。
例--使用FlowLayout布局 import java.awt.*; import javax.swing.*; public class FlowLay { public static void main(String args[]) { Frame frm=new Frame("BorderLayout"); FlowLayout layout=new FlowLayout(); frm.setBounds(0,0,200,200); frm.setLayout(layout); Button but1,but2; TextField txt1,txt2; but1=new Button("button 1"); but2=new Button("button 2"); txt1=new TextField("text 1",10); txt2=new TextField("text 2",10);
frm.add(but1); frm.add(but2); frm.add(txt1); frm.add(txt2); frm.setVisible(true); } }
运行程序出现如图所示的界面: 初始界面 增大窗口宽度后的界面
11.2.3 GridLayout GridLayout(网格布局)管理器将容器划分为大小相等的若干行乘若干列的网格,组件按照从左到右、从上到下的的顺序依此放入各网格中。每个组件占满1格。组件大小随网格大小变化。如果组件数比网格数多,系统将自动增加网格数;如果组件数比网格数少,未用的网格区空闲。
例--使用GridLayout布局 import java.awt.*; public class GridLay { public static void main(String args[]) { Frame frm=new Frame("GridLayout"); GridLayout layout=new GridLayout(2,2); //定义2行2列的GridLayout frm.setBounds(0,0,200,200); frm.setLayout(layout); String names[]={ "butt1","butt2","butt3","butt4"};
for(int i=0; i<names.length; i++) { frm.add( new Button(names[i])); } frm.setVisible(true); } }
11.3 事件处理 11.3.1 委托事件模型 JDK1.1之后采用委托事件模型 (delegation event model)。
1.事件 事件(event)是指一个状态的改变,或者一个动作的发生。例如,单击一个按钮,将产生单击事件;单击窗口关闭按钮,产生窗口关闭事件。
2.事件类 在Java中,用不同的类处理不同的事件。在java.awt.event包中定义了许多事件类,如单击事件类(ActionEvent)和窗口事件类(WindowEvent)。