JAVA事件处理模型

时间:2022-08-30 21:27:12

一、用户事件

用户在程序界面所进行的操作,比如单击鼠标或者输入字符,称为用户事件

程序对这些用户事件做出响应,称为事件处理。

 

二、事件处理模型

1.事件类型——侦听程序接口

系统将这些用户事件分类,分成各种事件类型

系统为每个事件类型提供了一个侦听程序接口,接口包含的方法,规定了接受并处理该类事件的规范。

 

2.侦听程序接口——事件侦听程序

为了接收并处理某个事件类型,组件必须注册相应的事件处理程序,称为事件侦听程序(Listener,也称为侦听器)

 

Listener的构造条件有两个:

一是必须实现对应事件类型的侦听程序接口,

二是需要实现接口中规定的响应事件的方法。

 例如,为了处理按钮上的ActionEvent事件,需要定义一个实现ActionListener接口的侦听程序类。

public interface ActionListener extends EventListener{

  public void actionPerformed(ActionEvent e);

}

该接口中只定义了一个方法actionPerformed(),当出现ActionEvent事件时,就会调用该方法。

actionPerformed(),是一个回调函数。即被系统调用的函数。

直调回调的差别在于,调用主体是不是第一人称的程序体。actionPerformed()是预先设定的函数,但是设定当时并没有被调用,而是等待ActionEvent发生时候,由系统来把这种行为作为参数,调用这个函数。

btw,系统调用这些回调的方法是轮询,即用轮询的方式在线程池队列中查找侦听这个系统事件的回调函数。

 

我们回到这个侦听事件类。每个组件都有若干个形如addXXXListener(XXXListener)的方法,通过这类方法,可以为组件注册事件侦听程序。

这种处理事件机制称为委托事件处理机制

概括地说,事件被直接送往产生这个事件的组件,组件需要注册一个或多个侦听程序。侦听程序的类中包含了事件处理程序,接收和处理这个事件。事件是一个对象,它只向注册的侦听程序报告。

 

三、GUI事件处理步骤

1.程序中引入java.awt.event包

import java.awt.event.

2.给所需的事件源对象注册侦听事件程序。

事件源对象.addXXXListener(XXXListener);

3.实现相应的方法。如果侦听程序接口包含多个方法,必须实现所有方法。

 

事件的侦听程序可以定义在一个单独的类中,也可以定义在组件类中。