当前位置: 首页 > news >正文

JAVA监听器原理

Java 最新的事件处理方法是基于授权事件模型

事件源生成事件并将其发送至一个或多个监听器

监听器简单地等待,直到它收到一个事件。一旦事件被接受,监听器将处理这些事件,然后返回。

事件:在授权事件模型中,事件是一个描述事件源状态改变的对象 。 
通过鼠标、键盘与 GUI 界面直接或间接交互都会生成事件。 如:按下一个按钮、通过键盘输入一个字符、选择列表框中的一项、点击一下鼠标等。

事件源:事件源是一个生成事件的对象
一个事件源可能会生成不同类型的事件
事件源提供了一组方法,用于为事件注册一个或多个监听器。
每种事件的类型都有其自己的注册方法。一般形式为:
public void add<EventType>Listener (TypeListener e)

AWT采取的事件控制过程:监听器对象属于一个类的实例,这个类实现了一个特殊的接口,名为“监听者接口”
事件源是一个对象,它可以注册一个或多个监听器对象,并向其发送事件对象。 
事件源将在发生事件时向所有注册的监听器发送事件对象。 
监听器对象使用事件对象中的信息来确定它们对事件的响应

事件模型:
1.基于代理(授权)事件模型
事件处理是一个事件源授权到一个或者多个事件监听器。其基本原理是:组件激发事件,事件监听器监听和处理事件,可以调用组件的add<EventType>Listener方法向组件注册监听器。把其加入到组件以后,如果组件激发了相应类型的事件,那么定义在监听器中的事件处理方法会被调用。

2.此模型主要由以三种对象为中心组成
事件源 由它来激发产生事件,是产生或抛出事件的对象。
事件监听器 由它来处理事件
实现某个特定EventListener 接口,此接口定义了一种或多种方法,事件源调用它们以响应该接口所处理的每一种特定事件类型 。
事件 具体的事件类型
事件类型封装在以java.util.EventObject为根的类层次中。当事件发生时,事件记录发生的一切事件,并从事件源传播到监听器对象


来源:http://www.javaweb.cc/language/java/272459.shtml

一. 事件监听器的参与者:

1.事件对象: 
一般继承自java.util.EventObject对象,由开发者自行定义.

2.事件源: 
就是触发事件的源头,不同的事件源会触发不同的事件类型.

3.事件监听器: 
事件监听器负责监听事件源发出的事件.一个事件监听器通常实现java.util.EventListener这个标识接口. 

其整个处理过程是这样的,事件源可以注册事件监听器对象,并可以向事件监听器对象发送事件对象.事件发生后,事件源将事件对象发给已经注册的所有事件监听器. 
监听器对象随后会根据事件对象内的相应方法响应这个事件.

Demo

[java] view plaincopy

  1. /** 
  2.  * 事件对象的定义 
  3.  * @author administrator 
  4.  * 
  5.  */  
  6. public class DemoEvent extends EventObject {  
  7.     private static final long serialVersionUID = 1L;  
  8.   
  9.     public DemoEvent(Object source) {  
  10.         super(source);  
  11.     }  
  12. }  

[java] view plaincopy

  1. /** 
  2.  * DemoEvent事件监听器接口 
  3.  * @author administrator 
  4.  * 
  5.  */  
  6. public interface DemoEventListener extends EventListener {  
  7.   
  8.     public void processEvent(DemoEvent demoEvent);  
  9.   
  10. }  

[java] view plaincopy

  1. /** 
  2.  * 第一个具体的事件监听器 
  3.  * @author administrator 
  4.  * 
  5.  */  
  6. public class FirstEventListener implements DemoEventListener {  
  7.   
  8.     @Override  
  9.     public void processEvent(DemoEvent demoEvent) {  
  10.         System.out.println("First event listener process event...");  
  11.   
  12.     }  
  13.   
  14. }  

[java] view plaincopy

  1. /** 
  2.  * 第二个具体的事件监听器 
  3.  * @author administrator 
  4.  * 
  5.  */  
  6. public class SecondEventListener implements DemoEventListener {  
  7.   
  8.     @Override  
  9.     public void processEvent(DemoEvent demoEvent) {  
  10.         System.out.println("Second event listener process event...");  
  11.   
  12.     }  
  13.   
  14. }  

[java] view plaincopy

  1. /** 
  2.  * 定义事件源 
  3.  * @author administrator 
  4.  * 
  5.  */  
  6. public class EventSource {  
  7.     private List<DemoEventListener> listeners = new ArrayList<DemoEventListener>();  
  8.   
  9.     public EventSource() {  
  10.     }  
  11.   
  12.     public void addDemoListener(DemoEventListener demoListener) {  
  13.         listeners.add(demoListener);  
  14.     }  
  15.   
  16.     public void notifyDemoEvent() {  
  17.         for (DemoEventListener eventListener : listeners) {  
  18.             DemoEvent demoEvent = new DemoEvent(this);  
  19.             eventListener.processEvent(demoEvent);  
  20.         }  
  21.     }  
  22. }  

[java] view plaincopy

  1. /** 
  2.  * 测试监听器处理过程 
  3.  * @author administrator 
  4.  * 
  5.  */  
  6. public class DemoEventClient {  
  7.     //java中文网:http://www.javaweb.cc  
  8.   
  9.     public static void main(String args[]) {  
  10.   
  11.         //定义事件源  
  12.         EventSource eventSource = new EventSource();  
  13.   
  14.         //定义并向事件源中注册事件监听器  
  15.         FirstEventListener firstEventListener = new FirstEventListener();  
  16.         eventSource.addDemoListener(firstEventListener);  
  17.   
  18.         //定义并向事件源中注册事件监听器  
  19.         SecondEventListener secondEventListener=new SecondEventListener();  
  20.         eventSource.addDemoListener(secondEventListener);  
  21.   
  22.         //事件通知  
  23.         eventSource.notifyDemoEvent();  
  24.     }  
  25. }  

zhuanzai:JAVA监听器原理_小强快跑~~-CSDN博客_java监听器

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ubuntu 信息获取
  • java中逻辑右移;算术右移的区别
  • Java中的接口继承
  • ftp测试练习
  • JTabel鼠标按下与放开getValueIsAdjusting()
  • display.syncExec方法例子
  • 常用的网络
  • Netty 5用户指南
  • netty 学习 (4)混合使用coder和handler
  • netty 学习 (3)发送对象
  • netty 学习 (2)Handler的执行顺序
  • netty 学习 (1)
  • Java设计模式——工厂设计模式
  • Java开发中的23种设计模式详解(转)
  • CMMI学习
  • JAVA SE 6 GC调优笔记
  • Javascript设计模式学习之Observer(观察者)模式
  • java中具有继承关系的类及其对象初始化顺序
  • jquery cookie
  • python 装饰器(一)
  • Python利用正则抓取网页内容保存到本地
  • SegmentFault 2015 Top Rank
  • Swift 中的尾递归和蹦床
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 一个完整Java Web项目背后的密码
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • ​什么是bug?bug的源头在哪里?
  • #includecmath
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (7)STL算法之交换赋值
  • (C++17) std算法之执行策略 execution
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (分类)KNN算法- 参数调优
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (三)Honghu Cloud云架构一定时调度平台
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (一) springboot详细介绍
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET Core 项目指定SDK版本
  • .Net中ListT 泛型转成DataTable、DataSet
  • @Autowired 与@Resource的区别
  • @Data注解的作用
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • @ModelAttribute注解使用
  • [4.9福建四校联考]
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记
  • [AI StoryDiffusion] 创造神奇故事,AI漫画大乱斗!
  • [Android学习笔记]ScrollView的使用