JAVA监听器原理
http://blog.csdn.net/longyulu/article/details/25054697

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 {
- @Override
- public void processEvent(DemoEvent demoEvent) {
- System.out.println("First event listener process event...");
- }
- }
- /**
- * 第二个具体的事件监听器
- * @author administrator
- *
- */
- public class SecondEventListener implements DemoEventListener {
- @Override
- public 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.cc
- public 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();
- }
- }
- 顶
- 0
- 踩
JAVA监听器原理的更多相关文章
- Java监听器原理及实例
一.监听器原理 监听器是基于事件驱动的,用于对操作事件进行监听.处理,是观察者设计模式的应用 监听器三元素: 2.1 事件源:事件发生的源头 2.2 事件:对事件进行抽象.封装 2.3 监听器:用于监 ...
- java监听器原理理解与实现
监听器模型涉及以下三个对象,模型图如下: (1)事件:用户对组件的一个操作,称之为一个事件(2)事件源:发生事件的组件就是事件源(3)事件监听器(处理器):监听并负责处理事件的方法 执行顺序如下: 1 ...
- 自己编写一个Java监听器
Java监听器 1.原理: 当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法. 例如:创建一个“人”类Class Person 人拥有吃的方法public void eat(){},我 ...
- [JavaEE]Java NIO原理图文分析及代码实现
转http://weixiaolu.iteye.com/blog/1479656 目录: 一.java NIO 和阻塞I/O的区别 1. 阻塞I/O通信模型 2. java NIO ...
- Java NIO原理分析
Java IO 在Client/Server模型中,Server往往需要同时处理大量来自Client的访问请求,因此Server端需采用支持高并发访问的架构.一种简单而又直接的解决方案是“one-th ...
- Java跨平台原理
此篇博文主要源自网络xiaozhen的天空的博客:http://xiaozhen1900.blog.163.com/blog/static/1741732572011325111945246/ 1.是 ...
- 【转】Java跨平台原理
原文地址:http://www.cnblogs.com/gw811/archive/2012/09/09/2677386.html 1.是么是平台 Java是可以跨平台的编程语言,那我们首先得知道什么 ...
- 《Java虚拟机原理图解》 1.2、class文件里的常量池
[最新更新:2014/11/11] 了解JVM虚拟机原理 是每个Java程序猿修炼的必经之路. 可是因为JVM虚拟机中有非常多的东西讲述的比較宽泛.在当前接触到的关于JVM虚拟机原理的教程或者博客中 ...
- Java NIO原理图文分析及代码实现
原文: http://weixiaolu.iteye.com/blog/1479656 目录: 一.java NIO 和阻塞I/O的区别 1. 阻塞I/O通信模型 2. java ...
随机推荐
- web字体详解@font-face
一:字体的下载(http://www.dafont.com/new.php) 二:选择需要的字体并下载( Download ) 三:下载后并解压 四:获取@font-face所需要字体的格式.eot, ...
- EasyUI-panel 内嵌页面上的js无法被执行
声明: http://www.jeasyuicn.com/post-49.html 本文引用自GodSon的杰作 http://www.jeasyuicn.com/post-49.html,除修正了个 ...
- 读《程序员的SQL金典》[3]--表连接、子查询
一.表连接-JOIN 1. 自连接实例 查询类型相同的订单信息. SELECT O1 .*,O2.* FROM T_Order O1 JOIN T_Order O2 ON O1 .FTypeId= O ...
- PHP中多态,抽象类,接口,
小例子: 需求:公司定义一个接口让我们开发功能 usb.interface.php: <?php interface USB{ public function run(); } store.cl ...
- Java 导出EXCEL
1.Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开发人员则 ...
- C#面向对象总结2
1.值类型和引用类型: 值类型:int.double.bool.char.decimal.struct.enum 引用类型:string.自定义类.数组 存储: 值类型的值是存储在内存的栈当中. 引用 ...
- JSON序列化和反序列化的实例
之前有项目中使用到了Json的序列化和反序列化,现在将使用的实例记录下来以备查阅.如有不妥,请指教. 代码的最终目的是得到一个符合 resultClass<List<rtnGetFindM ...
- jQueryMobile控件之页面切换
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- springmvc跳转的几种方式
1:spring mvc 是围绕着DispatcherServlet展开的 ,其底层还是servlet 跳转方式: ①request.getRequestDispatcher("../ind ...
- wiglewifi
以上数据是使用wiglewifi软件收集的数据,把全部数据导出为KML格式,使用Google地球显示的,当然在大陆地区Google地球有些不正常,我使用的是lantern 以前使用lantern总是不 ...