JAVA监听器原理

来源:http://www.cnblogs.com/hulitut/archive/2012/03/27/2420414.html

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

/*** 事件对象的定义* @author administrator**/
public class DemoEvent extends EventObject {private static final long serialVersionUID = 1L;public DemoEvent(Object source) {super(source);}
}


/*** DemoEvent事件监听器接口* @author administrator**/
public interface DemoEventListener extends EventListener {public void processEvent(DemoEvent demoEvent);}

/*** 第一个具体的事件监听器* @author administrator**/
public class FirstEventListener implements DemoEventListener {@Overridepublic void processEvent(DemoEvent demoEvent) {System.out.println("First event listener process event...");}}

/*** 第二个具体的事件监听器* @author administrator**/
public class SecondEventListener implements DemoEventListener {@Overridepublic void processEvent(DemoEvent demoEvent) {System.out.println("Second event listener process event...");}}

/*** 定义事件源* @author administrator**/
public class EventSource {private List<DemoEventListener> listeners = new ArrayList<DemoEventListener>();public EventSource() {}public void addDemoListener(DemoEventListener demoListener) {listeners.add(demoListener);}public void notifyDemoEvent() {for (DemoEventListener eventListener : listeners) {DemoEvent demoEvent = new DemoEvent(this);eventListener.processEvent(demoEvent);}}
}

/*** 测试监听器处理过程* @author administrator**/
public class DemoEventClient {//java中文网:http://www.javaweb.ccpublic static void main(String args[]) {//定义事件源EventSource eventSource = new EventSource();//定义并向事件源中注册事件监听器FirstEventListener firstEventListener = new FirstEventListener();eventSource.addDemoListener(firstEventListener);//定义并向事件源中注册事件监听器SecondEventListener secondEventListener=new SecondEventListener();eventSource.addDemoListener(secondEventListener);//事件通知eventSource.notifyDemoEvent();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497885.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

美国的人工智能企业在研发哪些有趣的AI产品?

来源&#xff1a;亿欧概要&#xff1a;本文盘点了美国AI企业的有趣产品&#xff0c;或许能给国内AI创业者和投资人有所启发。同样是AI创业&#xff0c;国内外的打法显然不同。在国内&#xff0c;大部分AI创业公司都在拼主赛道&#xff0c;比如无人驾驶、AI安防、AI医疗、AI教育…

mysql创建反弹函数,MySql创建函数

首先需要查看一下创建函数的功能是否开启&#xff1a;mysql> show variables like %func%;------------------------------------------------| Variable_name | Value |------------------------------------------------| log_bin_trust_funct…

Java技术回顾之JNDI--实例

一、JNDI在Java EE中的应用JNDI 技术是Java EE规范中的一个重要“幕后”角色&#xff0c;它为Java EE容器、组件提供者和应用程序之间提供了桥梁作用&#xff1a;Java EE容器同时扮演JNDI提供者角色&#xff0c;组件提供者将某个服务的具体实现部署到容器上&#xff0c;应用程序…

【观点】智能制造:新时代智能产业革命的基石|王飞跃

来源&#xff1a; 中国科学院自动化研究所概要&#xff1a;以新的理念和新的技术发展新时期的智能制造科技&#xff0c;创新智能产业革命&#xff0c;将是中国从制造大国到制造强国&#xff0c;进而从世界大国到世界强国的必由之道和开路先锋。实体经济&#xff0c;特别是以制造…

matlab连续型随机变量,matlab连续型随机变量的分布.doc

matlab连续型随机变量的分布.doc 连续型随机变量的分布及其数字特征一、基本概念设随机变量X的分布函数为F(x)&#xff0c;若存在非负函数f(x)&#xff0c;使对任意实数x&#xff0c;有≤X{Pxd}则称X为连续型随机变量&#xff0c;并称f(x)为X的概率密度&#xff0c;它满…

Java技术回顾之JNDI--命名和目录服务基本概念

命名服务的相关概念&#xff1a; Naming Service 命名服务 命名服务将名称和对象进行关联&#xff0c;提供通过名称找到对象的操作。 例如&#xff1a;DNS系统将计算机名和IP地址进行关联。文件系统将文件名和文件句柄进行关联等等。 Name 名称 要在命名系统中查找对象&…

php phpass,ass.php · ciweiin/海洋cms 海洋影视管理系统 - 免费开源PHP - Gitee.com

// search jsonp server v1.2 form seacms by nohacks.cnrequire_once("include/common.php");require_once(sea_INC."/main.class.php");//参数过滤$cbfilter_input(INPUT_GET, cb,FILTER_SANITIZE_STRING);$wd filter_input(INPUT_GET, wd,FILTER_SANITI…

CB Insights发布AI创业公司100榜单 ,7家中国公司上榜,两家二次登榜

来源&#xff1a;36氪概要&#xff1a;近日&#xff0c;硅谷知名数据公司 CB Insights 在美国旧金山发布了第二届全球最强 AI 创业公司榜单AI 100。旷视科技、出门问问、今日头条、英语流利说、优必选、商汤科技以及寒武纪上榜 。近日&#xff0c;硅谷知名数据公司 CB Insights…

Java技术回顾之JNDI--JNDI API

JNDI的用途&#xff1a;1&#xff09;你可以用jndi来得到object类的属性 Attribute attr directory.getAttributes(personName).get("email"); String email (String)attr.get();2&#xff09;你可以用jndi来搜索对象foxes directory.search("oWiz,cUS",…

遗传算法pareto matlab,matlab遗传算法三目标优化,出来的pareto前沿图只是二维图...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼三目标不是三维图么&#xff1f;怎么修改啊&#xff1f;啊function fmultidisk(x)global I1 I2 Fr350;u0.5;fai1;W3400;v44.4444;m4; tc6.5; Dh75;WaW*m;g9.8;Dmax300;Tmax260;Ti35; Pmax3;P0max7;J4180;c0.113;rou7.8*10^(-6);EWa…

深度学习发展简要笔记

来源&#xff1a;非正式组织概要&#xff1a;在Yann LeCun、Yoshua Bengio和Geoffrey Hinton三巨头nature深度学习综述《deep learning》文章中提到&#xff0c;这段期间神经网络模型被主流的计算机视觉和学术界所抛弃。一、前言深度学习的发展大致分为这么几个学期&#xff1a…

利用ServiceLocator模式改进JNDI实践

J2EE应用系统是打了“分布式”的标签的&#xff0c;所以客户端需要定位业务层的组件和服务&#xff0c;常见的比如有&#xff1a;EJB Home接口、EJB LocalHome接口、JMS消息列队或主题、JMS消息列队工厂等等&#xff0c;当然还有再普通不过的JAVA对象了&#xff0c;那么对这些分…

数据革命在危机中诞生 援助组织尝试灵活方法拨开战争迷雾

无国界医生组织在安曼为叙利亚提供支持。图片来源&#xff1a;Neil Brandvold来源&#xff1a;科学网概要&#xff1a;每当战争、飓风或其他灾害肆虐时&#xff0c;援助组织面临的最大问题之一就是缺乏可靠的数据。当Issam Salim&#xff08;化名&#xff09;讲述他进行的手术时…

德勤2018TMT八大预测:移动互联网迎来二次革命

来源&#xff1a;智东西概要&#xff1a;数万手机AR应用上市&#xff0c;AI芯片打入旗舰手机&#xff0c;数据中心ML芯片多样化&#xff0c;移动数字经济继续开挂。2017年&#xff0c;很多传统TMT巨头面临增长缓趋&#xff0c;于是考虑重资产化追求规模效应&#xff0c;开拓、转…

oracle 中 start tran,The value (30) of MAXTRANS parameter ignored

The value (30) of MAXTRANS parameter ignored在客户的数据库系统中(Oracle 10.2.0.3)&#xff0c;当使用expdp备份时就出现如下错误&#xff0c;非常准时。可以看到&#xff0c;这个错误就是由于备份时创建备份主表(Master Table)产生的&#xff1a;Sat Mar 7 02:40:01 2009T…

JNDI概述

JNDI是 Java 命名与目录接口&#xff08;Java Naming and Directory Interface&#xff09;&#xff0c;在J2EE规范中是重要的规范之一&#xff0c;不少专家认为&#xff0c;没有透彻理解JNDI的意义和作用&#xff0c;就没有真正掌握J2EE特别是EJB的知识。那么&#xff0c;JNDI…

北京出台自动驾驶新规:自动驾驶车辆须配备司机应急

来源&#xff1a;人民日报概要&#xff1a;在中国境内注册的独立法人单位&#xff0c;因进行自动驾驶相关科研、定型试验&#xff0c;可申请临时上路行驶。记者今天从北京市交通委获悉&#xff0c;北京市交通委联合市公安交管局、市经济信息委等部门&#xff0c;制定发布了加快…

oracle简单序列,-30天下载

如何使用Oracle序列&#xff1a;Oracle序列(sequence)是一种数据库项&#xff0c;能够生成一个整数序列。通常用于填充数字类型的主键列。1、创建序列&#xff1a;CREATE SEQUENCE sequence_name[START WITH start_num][INCREMENT BY increment_num][{MAXVALUE maximum_num|NOM…

JNDI配置原理详解

最近写书&#xff0c;写到JNDI&#xff0c;到处查资料&#xff0c;发现所有的中文资料都对JNDI解释一通&#xff0c;配置代码也是copy的&#xff0c;调了半天也没调通&#xff0c;最后到SUN的网站参考了一下他的JNDI tutorial&#xff0c;终于基本上彻底明白了和多数java服务一…

【未来研究】城市云脑是互联网云脑的节点,城市云脑之间如何互补与支撑

作者: 互联网进化论作者 &#xff0c;计算机博士 刘锋前言&#xff1a;本文是未来智能实验室的研究文章&#xff0c;重点探讨了基于类脑架构的智慧城市建设不应局限在城市内部&#xff0c;而是在互联网大背景下&#xff0c;不同城市之间也会发生智慧建设的协同效应。本文从城市…