JAVA中的委托事件模型

      Java自JDK1.1之后采用委托事件模型(delegation event model)。委托事件模型是进行图形用户界面设计的核心,在了解该模型之前,先介绍几个基本概念。

1、 事件

      事件(event)是指一个状态的改变,或者一个活动的发生。例如,用户点击窗口关闭按钮,发生窗口关闭事件;用户单击一个按钮,产生动作事件。

2、 事件源

      发生事件的组件称为事件源。例如,用户单击窗口关闭按钮是在窗口上发生的事件,所以窗口为事件源;用户单击按钮产生的动作事件是在按钮上发生的,所以按钮为事件源。

3、 事件类和事件监听器接口

      Java将事件封装成事件类,并为每一个事件类定义一个事件监听器接口(listener interface),约定事件处理方法,指定产生事件时执行的操作。

      常用的事件类和对应的事件监听器接口如表1所示:

图片发自App


4、委托事件模型

​      当我们点击窗口或按钮等组件,想让程序执行希望的操作时,需要实现该事件对应的事件监听器接口,也就是告诉程序如果发生这类事件,该怎么处理。单这样还不行,不是谁发生该事件都进行处理,要指明哪个事件源发生该事件才进行处理。因此还需要在事件源上注册该监听器对象。这样事件源和事件监听器之间就建立了联系,当事件源发生该事件时,注册在事件源上的监听器对象就能监听到该事件,从而执行事件监听器的对应方法。这就是事件委托模型,如图1所示。

图片发自App


      处理发生在某个图形用户界面组件上的XxxEvent事件的某种情况,其事件处理的通用编写流程:

      (1) 编写一个实现XxxListener接口的事件监听器类。

      (2) 在XxxListener类中的用于处理该事件情况的方法中,编写处理代码。

      (3) 调用组件的addXxxListener方法,将类XxxListener创建的实例对象注册到事件源组件上。

      举一个简单的例子,在Frame组件上添加一个Button按钮,点击Button按钮关闭窗口。

import java.awt.*;

import java.awt.event.*;

public class MyFrame implements ActionListener{

//实现ActionListener监听器接口

​Frame f;

​Button bt;

​public MyFrame()

​{

​​f=new Frame("My Frame"); //实例化窗口

​​f.setSize(400, 300);  //设置窗口大小

​​f.setLocationRelativeTo(null);

//设置窗口居中显示

​​bt=new Button("OK"); //实例化Button按钮

​​bt.addActionListener(this);

// 注册监听器对象

​​f.add(bt); //将按钮bt添加到窗口f上

​​f.setVisible(true); //设置窗口可显示

​}

​public static void main(String[] args) {

​​// TODO Auto-generated method stub

​​new MyFrame();

​}

​@Override

​//实现监听器接口方法

​public void actionPerformed(ActionEvent e) {

​​// TODO Auto-generated method stub

​​System.exit(0);  //结束程序

​}

}

你可能感兴趣的:(JAVA中的委托事件模型)