图形用户界面程序设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
40button.addActionListener(
41new ActionListener(){
42public void actionPerformed(ActionEvent enent){
43//获取输入的文本内容
44String inf = textField.getText();
45//设置标签显示的文本内容
(2)容器类组件
一个GUI程序中的基本组件,通常要放在一个容纳这些基本组件的容器中,所以把在AWT中专门容纳其他组件的一些特定组件叫容器(Container),容器的基类是Container类,Container类是Component的子类。如图9-1所示。
(3)布局管理类
一个容器中的组件,按照什么样的方式排列(即容器中的组件如何摆放),由AWT中的布局管理类组件负责。布局管理类组件也叫布局管理器。布局管理器类在图9-1的左下方,布局管理器类实现了LayoutManager接口或LayoutManager2接口。
下面介绍一个简单Java GUI程序,通过该程序使读者先对Swing程序有一个直观的印象。
9.1.2【案例9-1】文本转换器程序
1.案例描述
设计一个GUI程序,在一个文本框中输入一行英文,单击转换按钮后可以将文本框中输入的内容转换为大写字母后显示出来。
2.案例效果
图9-3(a)所示的窗口是案例程序在执行后的效果,图9-3(b)所示的窗口是输入文本内容后转换的结果。
31
32//设置frm的大小
33frm.setSize(300,200);
34//设置frm的可见性
35frm.setVisible(true);
36//设置frm的关闭功能
37frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
38
39//给按钮添加事件处理功能
在这里给出AWT和Swing组件层次结构图的主要目的是让读者对组件(components)、容器(containers)、布局管理器(LayoutManager)之间的关系、以及AWT组件与Swing组件之间的关系有一个初步了解,因为学习GUI程序设计理解类之间的继承关系非常重要。
AWT及Swing就好像一大片树林,其中有各种资源,而其间又有许多是互动的关系。我们需要了解这片树林到底有哪些可用资源,这些资源放在哪里,它们之间的关系是怎么样的,这样才不会见树不见林,得心应手的设计Java GUI程序。
通过该程序,我们可以大致到GUI程序的组成总结如下:
引入相关的包:案例9-1中的07、08和09行引入的3个包在一般的Swing程序设计中都要引入。
设置顶层容器:顶层容器常用JFram源自文库。
创建基本组件:如按钮和标签等。
将基本组件添加到容器中:一般使用容器类定义的add方法完成添加。如案例9-1中的27到30行。
3.组成GUI程序的组件简介
在Java GUI程序设计中,一个程序通常由以下4个基本部分组成:
(1)基本组件
基本组件是构成GUI程序的按钮(Button)、标签(Label)、文本框(TextField)、选择框(Choice)等。基本组件都是抽象类Component的子类,而Component类又继承Object类,如图9-1所示。
Swing组件从功能上分可分为:顶层容器、中间层容器和基本组件。
2.Component类
Java图形用户界面的最基本组成部分是组件(Component),组件是一个可以以图形化的方式显示在屏幕上并能与用户进行交互的对象,例如一个按钮,一个标签等。Java语言中的GUI组件不能独立地显示出来,必须将组件放在一个容器中才可以显示出来。
布局管理:放置基本组件的容器可以使用一个名叫GridLayout布局管理类管理。
事件处理:该程序中要完成将输入的文本内容轮换为大写后显示的功能,因此事件处理程序中首先要取得在文本框中输入的内容,这可以使用文本框(JTextField)定义的getText方法。对取得的字符串可以使用String类定义的toUpperCase方法转换为大写,然后使用标签类(JLabel)定义的setText方法,将转换后的内容设置为标签要显示的内容。
46label2.setText("您输入的文本转换成大写后是:"+inf.toUpperCase());
47}
48});
49}
50 }
尽管该程序中有比较详细的注释,但读者在阅读这些代码时可能还是不太理解,本案例的主要目的是让读者对Java GUI程序的基本架构有一个初步的了解,至于程序中所涉及到的基本组件、容器、布局管理和事件处理等知识在以后的内容中要进行详细的分析。
AWT可用于Java的Applet程序和Application程序中。AWT提供的组件都在位于java.awt包中。
AWT只是一组通用的无关于特定平台类。在具体某一平台上使用AWT组件时(如Button,即按钮),由运行时系统调用本地代码(native code)来实现该组件。例如,如果在Windows平台中运行的一个Java GUI程序中使用了一个按钮组件,则运行时系统会调用Windows中实现按钮的代码显示一个Windows风格的按钮,而同样的代码在Solaris平台中运行时,系统会调用Solaris中实现按钮的代码显示一个Motif(Solaris中窗口风格的名称)风格的按钮。这就会出现在Java中相同名称的组件,由于不同平台上本地实现的不同,而产生不同的外观效果。因此,AWT组件要在不同的平台上给用户提供一个一致的外观效果就遇到了困难。也正是因为AWT所提供的窗口组件,并非由AWT完全真实的实现了这些组件工具,因此才将AWT称为抽象的(abstract)窗口工具。
2.Swing
Swing组件与AWT组件相比有如下特点:
Swing组件完全用Java语言编写。
Swing组件的实现没有使用本地代码。
Swing组件的外观灵活多样,如按钮可以显示图形,形状除了矩形外还可以是圆形或其他形状的按钮。
Swing提供的组件比AWT更丰富,如Swing提供AWT中所没有导航、打印等功能。
但是读者要注意,Swing并不是为了完全替代AWT,而是对AWT的扩展,因为Swing中的组件继承自AWT,Swing中的版面布局管理和事件处理使用的还是AWT中定义的内容。一般将AWT组件称为重量级组件,而将Swing中不依赖于本地GUI资源的组件称为轻量级组件。
Swing组件位于javax.swing包中,该包中定义250多个类,其中的组件类近50个(以J开头)。javax表示java extension是缩写,因此对Java的所有扩展功能都放在javax中,Swing就是其中之一。
(4)事件处理类
当用户按下GUI程序中的一个按钮时,程序中就要对该“事件”进行处理,如按下一个“保存”按钮时,要进行文件的存盘操作。AWT中定义的事件类AWTEvent是EventObject类的子类,而EventObject类继承了Object类。
图9-2是Swing中主要类的层次结构图。由于Swing中的JApplet、JWindow、JFrame和JDialog等类直接继承了AWT中的相关类,所以Swing中的这几个类在图9-1中。从图9-2中可以看出AWT中的基本组件,在Swing中用相应的组件来代替,如AWT的Button组件,在Swing中相应的组件为JButton。Swing组件类的名称前都加了“J”这个字母,以示与AWT组件的区别。
24final JTextField textField = new JTextField(40);
25
26//将基本组件添加到内容面板
27contentPane.add(label1);
28contentPane.add(textField);
29contentPane.add(label2);
30contentPane.add(button);
19
20//创建基本组件
21final JLabel label1 = new JLabel("请在下面的文本框中输入要转换的内容:");
22final JLabel label2 = new JLabel("");
23JButton button = new JButton("显示转换后的文本内容");
4.程序解析
下面是该案例的程序代码:
01 //***********************************************************
02 //案例:9.1
03 //程序名:toUpperCase.java
04 //功能:转换器程序,将句子中小写字母转换为大写字母
05 //***********************************************************
给组件添加事件处理功能:如案例9-1中的40行。
编写事件处理程序:如案例9-1中的41到48行。
9.1.3【相关知识】组件类的层次结构与Swing程序结构简介
使用Swing进行GUI程序设计时,一般可按照如下的流程进行:
1.组件类的层次结构与分类
大多数Swing组件的继承层次结构如下:
java.lang.Object
06
07 import java.awt.*;
08 import javax.swing.*;
09 import java.awt.event.*;
10
11 public class toUpperCase {
12public static void main(String[] args) {
13//创建一个框架作为顶层容器
3.技术分析
该GUI程序也由前面介绍有4个部分组成:
基本组件:组成该GUI程序的基本组件有:一个按钮(JButton)、两个标签(JLabel)和一个文本框(JTextField)。一个标签用于显示提示信息,另一个标签用于显示转换后的结果,文本框用于输入要转换的文本内容,按钮用于发出转换命令。
容器:上述基本组件可以放在一个名叫JFrame的容器中,该窗口一般作为应用程序的框架窗口。
∟java.awt.Component
∟java.awt.Container
∟javax.swing.JComponent
Component类是所的组件的顶层类,Container类是AWT中容器类的顶层类(该类下一节介绍),其子类JComponent是Swing组件的顶层类。在这些顶层类中定义了大多数组件可以使用常用操作。如在Component类中定义了在第8章Applet程序中所使用过的paint等方法;如在Container类中定义了本章案例9-1中所用的给容器添加组件的add和设置容器布局管理的setLayout等方法。
14JFrame frm = new JFrame("文本转换器程序");
15//取得frm中放置内容的面板
16Container contentPane = frm.getContentPane();
17//设置frm的布局管理
18contentPane.setLayout(new GridLayout(4,1));
图形用户界面程序设计
9.1
为了使读者对Java GUI程序设计有一个比较全面的了解,本节先简要介绍一下Java GUI程序设计的发展历程及Java GUI程序设计中的几个基本概念。
9.1.1AWT与Swing介绍
1.AWT
在Java语言出现以前,各种操作系统平台如Windows、Linux、Solaris等有其专有的图形用户界面。Java语言为了达到独立于平台的目的,最初设计了一种名叫AWT的GUI程序开发类库,AWT (Abstract Window Toolkit)是指抽象窗口工具包,在AWT中提供了建立GUI程序的工具集,它主要包括基本的GUI程序组件,如按钮、标签、菜单、颜色、字体类、布局管理器等,另外还提供了事件处理机制及图像操作等功能。
AWT的设计思想可以使Java语言系统的设计人员很快实现在不同平台下的GUI组件,但缺点随操作系统平台的不同会显示出不同的样子。另外,AWT中的组件比较呆板,如按钮Button,只能是一个方框中显示按钮的名称这种样子,而无法改变。为此,在Java 2以后,SUN公司开发出了一种功能更为强大的名叫Swing组件。
相关文档
最新文档