java中的事件机制的参与者有3种角色:

1.event object:事件状态对象,用于listener的相应的方法之中,作为参数,一般存在与listerner的方法之中

2.event source:具体的事件源,比如说,你点击一个button,那么button就是event source,要想使button对某些事件进行响应,你就需要注册特定的listener。

3.event listener:对每个明确的事件的发生,都相应地定义一个明确的Java方法。这些方法都集中定义在事件监听者(EventListener)接口中,这个接口要继承 java.util.EventListener。 实现了事件监听者接口中一些或全部方法的类就是事件监听者。

  伴随着事件的发生,相应的状态通常都封装在事件状态对象中,该对象必须继承自java.util.EventObject。事件状态对象作为单参传递给应响应该事件的监听者方法中。发出某种特定事件的事件源的标识是:遵从规定的设计格式为事件监听者定义注册方法,并接受对指定事件监听者接口实例的引用。

具体的对监听的事件类,当它监听到event object产生的时候,它就调用相应的方法,进行处理。

先看看jdk提供的event包:

public interface EventListener:所有事件侦听器接口必须扩展的标记接口。

public class EventObject extends Object implements Serializable
所有事件状态对象都将从其派生的根类。 所有 Event 在构造时都引用了对象 "source",在逻辑上认为该对象是最初发生有关 Event 的对象。

(1)通过DoorEvent.java文件创建DoorEvent类,这个类继承EventObject。

/**
* 定义事件对象,必须继承EventObject
*/

public class DoorEvent extends EventObject {private static final long serialVersionUID = 6496098798146410884L;private String doorState = "";// 表示门的状态,有“开”和“关”两种public DoorEvent(Object source, String doorState) {super(source);this.doorState = doorState;}public void setDoorState(String doorState) {this.doorState = doorState;}public String getDoorState() {return this.doorState;}}

(2)定义新的事件监听接口,该接口继承自EventListener;该接口包含对doorEvent事件的处理程序:

/**
* 定义监听接口,负责监听DoorEvent事件
*/

public interface DoorListener extends EventListener {public void doorEvent(DoorEvent event);
}

通过上面的接口我们再定义事件监听类,这些类具体实现了监听功能和事件处理功能。

/**
* 该类为 门1监听接口的实现,做具体的开门,关门动作
*/

public class DoorListener1 implements DoorListener {@Overridepublic void doorEvent(DoorEvent event) {// TODO Auto-generated method stubif (event.getDoorState() != null && event.getDoorState().equals("open")) {System.out.println("门1打开");} else {System.out.println("门1关闭");}}}

/**

* 该类为 门2监听接口的实现,做具体的开门,关门,以及开灯,关灯动作
*/

public class DoorListener2 implements DoorListener {@Overridepublic void doorEvent(DoorEvent event) {// TODO Auto-generated method stubif (event.getDoorState() != null && event.getDoorState().equals("open")) {System.out.println("门2打开,同时打开走廊的灯");} else {System.out.println("门2关闭,同时关闭走廊的灯");}}}

(3)通过DoorManager.java创造一个事件源类,它用一个Collection listeners对象来存储所有的事件监听器对象,存储方式是通过addDoorListener(..)这样的方法。notifyListeners(..)是触发事件的方法,用来通知系统:事件发生了,你调用相应的处理函数吧。

/**
* 事件源对象,在这里你可以把它想象成一个控制开门关门的遥控器,
* (如果是在swing中,就类似一个button)
*/

public class DoorManager {private Collection listeners;/*** 添加事件* * @param listener*            DoorListener*/public void addDoorListener(DoorListener listener) {if (listeners == null) {listeners = new HashSet();}listeners.add(listener);}/*** 移除事件* * @param listener*            DoorListener*/public void removeDoorListener(DoorListener listener) {if (listeners == null)return;listeners.remove(listener);}/*** 触发开门事件*/protected void fireWorkspaceOpened() {if (listeners == null)return;DoorEvent event = new DoorEvent(this, "open");notifyListeners(event);}/*** 触发关门事件*/protected void fireWorkspaceClosed() {if (listeners == null)return;DoorEvent event = new DoorEvent(this, "close");notifyListeners(event);}/*** 通知所有的DoorListener*/private void notifyListeners(DoorEvent event) {Iterator iter = listeners.iterator();while (iter.hasNext()) {DoorListener listener = (DoorListener) iter.next();listener.doorEvent(event);}}
}

(4)好了,最后写一个测试程序测试一下我们自定义的事件吧,这段程序应该不难理解吧:)

/**
* 主程序,就想象成要开门的哪个人
*/

public class DoorMain {public static void main(String[] args) {DoorManager manager = new DoorManager();manager.addDoorListener(new DoorListener1());// 给门1增加监听器manager.addDoorListener(new DoorListener2());// 给门2增加监听器// 开门manager.fireWorkspaceOpened();System.out.println("我已经进来了");// 关门manager.fireWorkspaceClosed();}
}

运行DoorMain

门1打开 
门2打开,同时打开走廊的灯
我已经进来了
门1关闭
门2关闭,同时关闭走廊的灯

转载于:https://www.cnblogs.com/jiangzhaowei/p/7445498.html

java事件处理机制(自定义事件)相关推荐

  1. java事件处理机制---键盘事件

    此案例实现了画框内圆形在按下 上下左右 时圆形的移动 事件源:产生事件的对象,如:键盘.鼠标等 事件:在事件源上产生了某种变化.如:键盘被按下等 键盘事件监听需要实现 implements KeyLi ...

  2. java事件处理模型_从零开始理解JAVA事件处理机制(3)

    我们连续写了两小节的教师-学生的例子,必然觉得无聊死了,这样的例子我们就是玩上100遍,还是不知道该怎么写真实的代码.那从本节开始,我们开始往真实代码上面去靠拢. 事件最容易理解的例子是鼠标事件:我们 ...

  3. 从零开始理解JAVA事件处理机制(3)

    我们连续写了两小节的教师-学生的例子,必然觉得无聊死了,这样的例子我们就是玩上100遍,还是不知道该怎么写真实的代码.那从本节开始,我们开始往真实代码上面去靠拢. 事件最容易理解的例子是鼠标事件:我们 ...

  4. java pc的录制与回放,用Java事件处理机制实现录制回放功能

    下载本文示例代码 目前在一些java应用程序的GUI测试工具,可以提供捕获用户操作的能力并在代码被修改之后能够自动回放用户的操作.文章将分析Java的事件处理模型及其原理,介绍了基于事件源识别的捕获/ ...

  5. Java —— 事件处理机制

    一.Java事件主要角色 Source:事件源,即触发事件的对象: EventObject:事件对象,即带有 EventSource 信息的事件对象,是对EventSource的包装: Eventli ...

  6. JS的事件处理机制以及事件代理(事件委托)

    一.先记个小知识点.cssText cssText 本质:设置 HTML 元素的 style 属性值. 用法:document.getElementById("d1").style ...

  7. 浅析C#的事件处理和自定义事件

    一.简单的自定义事件(1):无参数 namespace UserInputMonitor { class UserInputMonitor { public delegate void UserReq ...

  8. java的actionlistener_「actionlistener」Java——事件处理机制监听者基础(一)动作监听ActionListener - seo实验室...

    actionlistener 介绍: actionlistener是一个接口,ActionEvent通常在点击一个按钮或双击某个列表项或选中某个菜单时发生. 如何设置监听: 对监听者添加ActionL ...

  9. Java事件处理机制和适配器

    最重要的是理解事件源,监视器,处理事件的接口的概念. 1.事件源:是能够产生时间的对象都可以叫事件源,比如文本框,按钮,下拉列表之类的组件. 2.监视器:事件源要产生事件,必须要有什么东西去监视它,以 ...

最新文章

  1. idea 从svn导入多个项目_IDEA导入项目简单教程
  2. typora将html转为格式,Typora 修改配置文件实现自定义标签样式(常用)
  3. NumPy中的where()函数
  4. OData API 和 Restful API 这两个概念的区别和联系
  5. 未来计算机是什么结合的产物,计算机未来发展趋势 (2)
  6. 高德服务单元化方案和架构实践
  7. miracast投屏软件下载_手机画面如何投屏到电视?
  8. Kubernetes可以代替Docker,可笑
  9. 将图片从AutoCAD导出到Word
  10. 【Visio】 windows Visio 画图
  11. MySql5.7 + Linux 修改数据库密码
  12. android apk自动安装包下载,Android 下载Apk并安装
  13. 贴心的特效制作软件,抖音特效开放平台就能找到
  14. 灰色模型代码GM(1,1),从excel导入数据,亦可导出数据到excel中。
  15. python唐诗分析综合_全唐诗分析程序
  16. “我,35岁研发经理,月薪5W+,每年涨薪6-8K,特别焦虑” 评论区网友吵翻了
  17. STM32CubeIDE移植标准库
  18. ubuntu篇---ubuntu安装mysql教程
  19. 物联网的安全问题引起争论,这些威胁有待解决...
  20. 基于JavaEE网上服装购物系统的设计与实现

热门文章

  1. 我的IBM本本逃过一劫...
  2. 小程序入门学习21--springboot之后端各接口开发
  3. 【网络安全工程师面试合集】—如何利用Http协议入侵网站
  4. Linux操作Oracle(17)——linux oracle启动时 :各种报错 解决方案(2020.07.30更新...)
  5. pd.stats.ols.MovingOLS以及替代
  6. leetcode hot 1-2
  7. php中类的构造函数和析构函数,php面向对象-构造函数和析构函数详解
  8. halcon边缘提取颜色相近_初学者福利!三种用Python从图像数据中提取特征的技术...
  9. 修改手机屏幕刷新率_240Hz 超高刷新率,这手机屏幕比电竞专业屏还牛
  10. Python之Pandas库常用函数大全(含注释)