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);  //结束程序

​}

}

推荐阅读更多精彩内容

  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 4,169评论 0 17
  • 昨天是不是有点不太痛快?我其实也是有点。 你有没有试过做一些性格方面的测试,特别是求职的时候?一大堆选择题让你做,...
    绿水朱楼阅读 26评论 0 0
  • I'm going to help you clear the clutter and bring focus t...
    Susan的日常学习记录阅读 328评论 0 0
  • 若说我们生来,都会走向归途,那木我愿此生看尽繁华,尝遍百味,历经沧桑,抱着一份爱去赴死————题记 当...
    布丁buding阅读 261评论 5 7
  • 1. GO实现递归函数阶乘算运算 2. GO 斐波那契额列数 3. GO模拟双色球摇号 随机数产生7个号码 不能重...
    东方舵手阅读 115评论 0 0