2024年4月28日发(作者:)

查看文章

java图形界面(一)

2008年10月07日 星期二 22:22

一. AWT 和 SWING

AWT 和 SWING 是 Java 设计 GUI 用户界面的基础。与 AWT 的重量级组件

不同,Swing 中大部分是轻量级组件。正是这个原因,Swing 几乎无所不能,不

但有各式各样先进的组件,而且更为美观易用。所以一开始使用 AWT 的程序员

很快就转向使用 Swing 了。

那为什么 AWT 组件没有消亡呢?因为 Swing 是架构在 AWT 之上的,没有

AWT 就没有 Swing。所以程序员可以根据自己的习惯选择使用 AWT 或者是

Swing。但是,最好不要二者混用——除开显示风格不同不说,还很可能造成层

次 (Z-Order) 错乱,比如下例:

import .*;

import .*;

public class TestPanels extends JFrame {

public TestPanels() {

setDefaultCloseOperation(EXIT_ON_CLOSE);

JPanel panel = new JPanel();

for (int i = 0; i < 2; i++) {

(new JButton("Button 00" + i));

}

JTextArea textArea = new JTextArea(5, 15);

eWrap(true);

JScrollPane scrollPane = new JScrollPane(textArea);

getContentPane().add(panel, );

getContentPane().add(scrollPane, );

pack();

}

public static void main(String[] args) {

TestPanels tp = new TestPanels();

();

}

}

运行这个程序,并用鼠标拖动那个名为“cover”的子窗口,我们会发现一

1

个非常有趣的现象,如图:

显然 cover 子窗口是在 controls 子窗口之上的,但是它只罩盖住了

Swing Button,没有罩盖住 AWT Button。再看一会儿,你是不是有这样一种感

觉:Swing Button 是“画”上去的,而 AWT Button 则是“贴”上去的。这就

是二者混用造成层次错乱的一个例子。

Swing 组件有美观、易用、组件量大等特点,也有缺点——使用 Swing 组

件的程序通常会比使用 AWT 组件的程序运行更慢。但是大家都还是更喜欢用

Swing 组件,原因何在?因为随着计算机硬件的升级,一点点速度已经不是问题。

相反的,用户更需要美观的用户界面,开发人员则更需要易用的开发组件。

——好,我这就来教你使用 Swing 组件开发图形用户界面的 Java 应用程

序。 二. 框架、监听器和事件

框架 (Frame) 是 Java 图形用户界面的基础,它就是我们通常所说的窗口,

是 Windows/XWindow 应用程序的典型特征。说到 Windows/XWindow,大家很轻

易联想到“事件 (Event) 驱动”。Java 的图形用户界面正是事件驱动的,并且

由各种各样的监听器 (Listener) 负责捕捉各种事件。

假如我们需要对某一个组件的某种事件进行捕捉和处理时,就需要为其添加

监听器。比如,我们要在一个窗口 (JFrame) 激活时改变它的标题,我们就需要

为这个窗口 (JFrame 对象) 添加一个可以监听到“激活窗口”这一事件的监听

器——WindowListener。

怎么添加监听器呢?这通常由组件类提供的一个 addXXXXXListener 的方

法来完成。比如 JFrame 就提供有 addWindowListener 方法添加窗口监听器

(WindowListener)。

一个监听器经常不只监听一个事件,而是可以监听相关的多个事件。比如

WindowListener 除了监听窗口激活事件 (windowActivate) 之外,还可以监听

窗口关闭事件 (windowClosing) 等。那么这些事件怎么区分呢?就靠重载监听

器类 (Class) 的多个方法 (Method) 了,监听器监听到某个事件后,会自动调

用相关的方法。我们只要重载这个方法,就可以处理相应的事件了。

不妨先看一个例子:

import .*;

import .*;

public class TestFrame extends JFrame {

private int counter = 0;

2