http://blog.csdn.net/longyulu/article/details/25054697

标签: 监听器
2014-05-05 15:40 9070人阅读 评论(1) 收藏 举报
 分类:
Java(41) 

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

  1. /**
  2. * 事件对象的定义
  3. * @author administrator
  4. *
  5. */
  6. public class DemoEvent extends EventObject {
  7. private static final long serialVersionUID = 1L;
  8. public DemoEvent(Object source) {
  9. super(source);
  10. }
  11. }
  1. /**
  2. * DemoEvent事件监听器接口
  3. * @author administrator
  4. *
  5. */
  6. public interface DemoEventListener extends EventListener {
  7. public void processEvent(DemoEvent demoEvent);
  8. }
  1. /**
  2. * 第一个具体的事件监听器
  3. * @author administrator
  4. *
  5. */
  6. public class FirstEventListener implements DemoEventListener {
  7. @Override
  8. public void processEvent(DemoEvent demoEvent) {
  9. System.out.println("First event listener process event...");
  10. }
  11. }
  1. /**
  2. * 第二个具体的事件监听器
  3. * @author administrator
  4. *
  5. */
  6. public class SecondEventListener implements DemoEventListener {
  7. @Override
  8. public void processEvent(DemoEvent demoEvent) {
  9. System.out.println("Second event listener process event...");
  10. }
  11. }
  1. /**
  2. * 定义事件源
  3. * @author administrator
  4. *
  5. */
  6. public class EventSource {
  7. private List<DemoEventListener> listeners = new ArrayList<DemoEventListener>();
  8. public EventSource() {
  9. }
  10. public void addDemoListener(DemoEventListener demoListener) {
  11. listeners.add(demoListener);
  12. }
  13. public void notifyDemoEvent() {
  14. for (DemoEventListener eventListener : listeners) {
  15. DemoEvent demoEvent = new DemoEvent(this);
  16. eventListener.processEvent(demoEvent);
  17. }
  18. }
  19. }
  1. /**
  2. * 测试监听器处理过程
  3. * @author administrator
  4. *
  5. */
  6. public class DemoEventClient {
  7. //java中文网:http://www.javaweb.cc
  8. public static void main(String args[]) {
  9. //定义事件源
  10. EventSource eventSource = new EventSource();
  11. //定义并向事件源中注册事件监听器
  12. FirstEventListener firstEventListener = new FirstEventListener();
  13. eventSource.addDemoListener(firstEventListener);
  14. //定义并向事件源中注册事件监听器
  15. SecondEventListener secondEventListener=new SecondEventListener();
  16. eventSource.addDemoListener(secondEventListener);
  17. //事件通知
  18. eventSource.notifyDemoEvent();
  19. }
  20. }
 
 
 
 
0

JAVA监听器原理的更多相关文章

  1. Java监听器原理及实例

    一.监听器原理 监听器是基于事件驱动的,用于对操作事件进行监听.处理,是观察者设计模式的应用 监听器三元素: 2.1 事件源:事件发生的源头 2.2 事件:对事件进行抽象.封装 2.3 监听器:用于监 ...

  2. java监听器原理理解与实现

    监听器模型涉及以下三个对象,模型图如下: (1)事件:用户对组件的一个操作,称之为一个事件(2)事件源:发生事件的组件就是事件源(3)事件监听器(处理器):监听并负责处理事件的方法 执行顺序如下: 1 ...

  3. 自己编写一个Java监听器

    Java监听器 1.原理: 当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法. 例如:创建一个“人”类Class Person 人拥有吃的方法public void eat(){},我 ...

  4. [JavaEE]Java NIO原理图文分析及代码实现

    转http://weixiaolu.iteye.com/blog/1479656 目录: 一.java NIO 和阻塞I/O的区别      1. 阻塞I/O通信模型      2. java NIO ...

  5. Java NIO原理分析

    Java IO 在Client/Server模型中,Server往往需要同时处理大量来自Client的访问请求,因此Server端需采用支持高并发访问的架构.一种简单而又直接的解决方案是“one-th ...

  6. Java跨平台原理

    此篇博文主要源自网络xiaozhen的天空的博客:http://xiaozhen1900.blog.163.com/blog/static/1741732572011325111945246/ 1.是 ...

  7. 【转】Java跨平台原理

    原文地址:http://www.cnblogs.com/gw811/archive/2012/09/09/2677386.html 1.是么是平台 Java是可以跨平台的编程语言,那我们首先得知道什么 ...

  8. 《Java虚拟机原理图解》 1.2、class文件里的常量池

    [最新更新:2014/11/11]  了解JVM虚拟机原理 是每个Java程序猿修炼的必经之路. 可是因为JVM虚拟机中有非常多的东西讲述的比較宽泛.在当前接触到的关于JVM虚拟机原理的教程或者博客中 ...

  9. Java NIO原理图文分析及代码实现

    原文: http://weixiaolu.iteye.com/blog/1479656 目录: 一.java NIO 和阻塞I/O的区别      1. 阻塞I/O通信模型      2. java ...

随机推荐

  1. AS3绘制扇形算法解析

    网上有很多使用AS3画一个扇形的方法,但是却一个都没有解释这个函数是如何运作来画出扇形的,下面浅谈下我对这个函数的理解. 首先上代码,代码来自http://blog.csdn.net/weiming8 ...

  2. PHP批量过滤MYSQL数据库内站外链接和图片

    因发现站内很多引用站外文章的链接失效,产生大量的死链接,对于搜索引擎来说是极不友好的,很不利于网站优化,所以站内添加了站外链接过滤功能,对于新加的文章,在添加入库时就自动增加rel="nof ...

  3. Maven+SSM搭建总结(非教程)

    记录我用Maven搭建Spring+SpringMVC+Mybatis项目的过程. 网上关于这个的详细教程有很多,但是优质而适合自己看的需要自己筛选以下我看过的几篇认为讲的比较详细的资源(照着做吧,做 ...

  4. Codeforces Round #370 (Div. 2) E. Memory and Casinos 线段树

    E. Memory and Casinos 题目连接: http://codeforces.com/contest/712/problem/E Description There are n casi ...

  5. java中byte, int的转换

    最近在做些与编解码相关的事情,又遇到了byte和int的转换,看着那些关于反码.补码的说明依旧头疼,还是记下些实用的方法吧.int -> byte可以直接使用强制类型转换: byte b = ( ...

  6. SQL取行最大值

    create table T(A decimal(10,1), B decimal(10,1), C decimal(10,1), D decimal(10,1), E decimal(10,1)) ...

  7. php冒泡排序

    <?php $arr = array(1,4,2,9,0,10,12,3,7); foreach($arr as $val) { echo $val."--"; } echo ...

  8. Jrebel6.3.3破解,配置图文教程

    JRebel是个很好的开发工具,我在网上找了好久都没有找到很详细的教程,破解与配置教程千篇一律,步骤不详细.编写这篇教程,综合网络上的知识,加上了自己的理解与详细图文步骤. 安装 一般最新的插件是没有 ...

  9. 网页闯关游戏(riddle webgame)--游戏玩法和整体介绍

    前言: 记得上大学那会, 有位传说中的大牛, 写了一个网页闯关类的游戏. 当时我们玩得不亦乐乎, 也是第一次接触到这种形式的游戏. 不过当时纯玩家心态, 并没有想过去创造一个. 最近想起这事, 突然想 ...

  10. opencv配置(2.49)

    转载自浅墨大神http://blog.csdn.net/poem_qianmo/article/details/19809337 OpenCV2.4.9和2.4.8的配置几乎一样,唯一的区别在下文中的 ...