background image

Java 开发:Java Swing 中三种事件处理方法的对比

Swing 是目前 Java 中不可缺少的窗口工具组,是用户建立图形化用户界面(GUI)程序的强
大工具。Java Swing 组件自动产生各种事件来响应用户行为。如当用户点击按钮或选择菜
单项目时,Swing 组件会产生一个 ActionEvent。Swing 组件会产生许多事件,如
ActionEvents,ChangeEvents,ItemEvents 等,来响应用户的鼠标点击行为,列表框中值的改
变,计时器的开始计时等行为。在 Java Swing 编程中,通过注册监听器,我们可以监听事
件源产生的事件,从而在事件处理程序中处理我们所需要处理的用户行为。
 Java Swing 中处理各组件事件的一般步骤是:
 1. 新建一个组件(如 JButton)。
 2. 将该组件添加到相应的面板(如 JPanel)。
 3. 注册监听器以监听事件源产生的事件(如通过 ActionListener 来响应用户点击按钮)。
 4. 定义处理事件的方法(如在 ActionListener 中的 actionPerformed 中定义相应方法)。
 以上步骤我们可以用多种方法实现。但人们通常用二种方法。第一种方法是只利用一个
监听器以及多个

if

语句来决定是哪个组件产生的事件;第二种方法是使用多个内部类来响

应不同组件产生的各种事件,其具体实现又分两种方式,一种是匿名内部类,一种是一
般内部类。
 为了说明如何使用上述三种方法实现事件的处理方法,我们建立一个简单的应用程序。
该程序界面有两个按钮,当用户点击相应的按钮,就会弹出一个对话框显示相应的内容。
通过这个简单程序,你可以实现自己更多、更复杂的用户界面程序。
 首先,我们利用单个监听器来实现该程序。我们定义一个名为 Simple1 的类来包括所有
代码。所有的用户行为(如点击按钮)由一个监听器 SimpleListenner 中的 actionPerformed 方
法来处理。以下是代码:
 

/*

 * Simple1.java - 处理事件的第一种方法
 * 在这个例子中,利用一个 ActionListener 来监听事件源产生的事件
 * 用一些 if 语句来决定是哪个事件源
 */

 import java.awt.*;
 import java.awt.event.*;
 import javax.swing.*;
 

public

 

class

 Simple1

 {
 

private

 

static

 JFrame frame; 

// 定义为静态变量以便 main 使用

 
 

private

 

static

 JPanel myPanel; 

// 该面板用来放置按钮组件

 
 

private

 JButton button1; 

// 这里定义按钮组件