zoukankan      html  css  js  c++  java
  • JAVA监听器原理

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

     

    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. }  
     
     
     
     
    0
  • 相关阅读:
    raspbian设置locale
    docker redis
    consul开发部署集群
    自动更新ssh登录的key到远程主机
    docker官方脚本阿里云镜像
    nodejs中国镜像
    github修改hosts加速
    docker容器更新总是自动重启
    webstrom不显示右边的竖线,代码结构线
    _mssql.c:266:22: fatal error: sqlfront.h: No such file or directory
  • 原文地址:https://www.cnblogs.com/guyuehuanhuan/p/5449219.html
Copyright © 2011-2022 走看看