目录
第一节 事件处理
第二节 实例演示
01 事件处理
事件处理模型
在Java程序运行时,如果用户进行某个操作,比如单击鼠标键或者输入字符,程序应当做出适当响应。用户在程序界面所进行的操作称为用户事件。对事件的响应称为事件处理。
Java中定义了很多事件类,用于描述不同的用户行为,例如,代表鼠标事件的MouseEvent类和代表键盘事件的KeyEvent类等。每当用户在组件上进行某种操作时,事件处理系统便会生成一个事件类对象。例如,用鼠标单击按钮,事件处理系统便会生成一个代表此事件的ActionEvent事件类对象。操作不同,事件类对象也会不同。
Java中,为了便于管理,系统将事件分类,称为事件类型。系统为每个事件类型提供一个侦听程序接口,它规定了接收并处理该类事件的方法的规范。为了接收并处理某类用户事件,组件必须注册相应的事件处理程序,这种事件处理程序称为事件侦听程序(Listener,也称为侦听器),它是实现了对应侦听程序接口的一个类。要作为侦听程序对象的类必须实现相应的接口,并实现接口中规定的响应事件的方法。例如,为了处理按钮上的ActionEvent事件,需要定义一个实现ActionListener接口的侦听程序类。对应ActionEvent事件,有ActionListener接口。
public interface ActionListenr extends EventListener{
public void actionPerformed(ActionEvent e);}
该接口中只定义了一个方法,即actionPerformed( ),当出现ActionEvent事件时,就会调用该方法。每个组件都有若干个形如addXXXListener(XXXListener)的方法,通过这类方法,可以为组件注册事件侦听程序。例如在JButton类中有如下的方法:
public void addActionListener(ActionListener l)
该方法可为JButton组件注册ActionEvent事件侦听程序,方法的参数是实现了ActionListener接口的类的一个实例。也可以删除添加的事件侦听程序,例如:
public void remove ActionListener(ActionListener l)
将移除指定的操作侦听器,以便它不再接收来自此按钮的操作事件。
这种处理事件机制称为委托事件处理模型。概括来说,事件被直接送往产生这个事件的组件,组件需要注册一个或多个侦听程序。侦听程序的类中包含了事件处理程序,用来接收和处理这个事件。事件是一个对象,它只向注册的侦听程序报告。事件处理的步骤如下:
①程序中引入java.awt.event包。
import java.awt.event;
②给所需的事件源对象注册事件侦听程序。事件源对象.addXXXListener(XXXListener);
③实现相应的方法。若某个侦听程序接口包含多个方法,则需要实现所有的方法。
02 实例演示
实例代码如下
ButtonHandler.java中的代码
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ButtonHandler implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
System.out.print("Action occurred");
}
}
Subject.java中的代码
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Subject {
public static void main(String args[])
{
JFrame frame=new JFrame("ActionEvent Demo ");
JButton b=new JButton("Press Me");
b.addActionListener(new ButtonHandler());
frame.getContentPane().add(b,BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
最后实现的效果如下