java中的事件机制的参与者有3种角色:

1.event object:事件状态对象,用于listener的相应的方法之中,作为参数,一般存在与listerner的方法之中

2.event source:具体的事件源,比如说,你点击一个button,那么button就是event source,要想使button对某些事件进行响应,你就需要注册特定的listener。

3.event listener:对每个明确的事件的发生,都相应地定义一个明确的Java方法。这些方法都集中定义在事件监听者(EventListener)接口中,这个接口要继承 java.util.EventListener。 实现了事件监听者接口中一些或全部方法的类就是事件监听者。
 
事件状态对象:
public class EventState extends EventObject {
 
      private static final long serialVersionUID = 1331423214321432154L;
 
      //参数为事件源和状态名
      public EventState(Object source,String state) {
             super( source);
             this. state= state;
      }
      
      private String state= "";
      public String getState() {
             return state;
      }
 
 
      public void setState(String state) {
             this. state = state;
      }
}
 
事件监听者(事件处理)
//事件处理器 EventListener
public abstract   class Handler implements EventListener {
      
      public Handler(){}
      
      public void doHandler(EventState state) {
            System. out.println( "handler1 执行了,现在状态是:" );
      }
}
 
事件源(事件的发起和控制)
 
      //事件源
      public class EventSource {
             //事件队列
             private Set<Handler> eventListeners;
            
             public EventSource(){
                   this. eventListeners= new LinkedHashSet<Handler>();
            }
            
             public void addListeners(Handler handler ){
                   this. eventListeners.add( handler);
            }
            
             public void removeListeners(Handler handler ){
                   this. eventListeners.remove( handler);
            }
             //事件处理
             public void triggerEvent1(){
                   if ( eventListeners== null) {
                         return ;
                  }
                   //改变事件状态
                  EventState state= new EventState( this, "triggerEvent1 sate");
                  notifies( state);
            }
             //事件执行
             protected void notifies(EventState sate){
                   if ( eventListeners.size()>0) {
                         for (Handler handler : eventListeners) {
                               handler.doHandler( sate);
                        }
                  }
            }
      }
 
当我们触发这个事件时
      public static void main(String[] args) {
                  EventSource source= new EventSource();
                   source.addListeners( new Handler(){
                         //重写事件处理函数
                         @Override
                         public void doHandler(EventState state) {
                              System. out.println( "handler1 执行了,现在状态是:" +state .toString());
                        }
                  });
                  
                   source.triggerEvent1();
      
            }
 

Java实现事件机制的更多相关文章

  1. java自定义事件机制分析

    import java.util.ArrayList; import java.util.EventListener; import java.util.EventObject; import jav ...

  2. Tomcat与Spring中的事件机制详解

    最近在看tomcat源码,源码中出现了大量事件消息,可以说整个tomcat的启动流程都可以通过事件派发机制串起来,研究透了tomcat的各种事件消息,基本上对tomcat的启动流程也就有了一个整体的认 ...

  3. Java 事件机制

    java事件机制包括三个部分:事件.事件监听器.事件源. 1.事件.一般继承自java.util.EventObject类,封装了事件源对象及跟事件相关的信息,用于listener的相应的方法之中,作 ...

  4. 关于JAVA中事件分发和监听机制实现的代码实例-绝对原创实用

    http://blog.csdn.net/5iasp/article/details/37054171 文章标题:关于JAVA中事件分发和监听机制实现的代码实例 文章地址: http://blog.c ...

  5. java:javaScript(定义方式,循环语句,函数与参数,事件机制,控制台记录,event事件获取键盘ascii,confirm和prompt,事件和内置对象,获取input,点击更换背景色)

    1. 定义JS的两种方式: <!DOCTYPE> <html> <head> <meta charset="UTF-8"></ ...

  6. 一文学会Java事件机制

    本文同时发布于个人网站 https://ifuyao.com/blog/java-event/ 相信做 Java 开发的朋友,大多都是学习过或至少了解过 Java GUI 编程的,其中有大量的事件和控 ...

  7. tkinter事件机制

    一.tkinter.Event tkinter的事件机制跟js是一样的,也是只有一个Event类,这个类包罗万象,集成了键盘事件,鼠标事件,包含各种参数. 不像java swing那种强类型事件,sw ...

  8. Java Garbage Collection基础详解------Java 垃圾回收机制技术详解

    最近还是在找工作,在面试某移动互联网公司之前认为自己对Java的GC机制已经相当了解,其他面试官问的时候也不存在问题,直到那天该公司一个做搜索的面试官问了我GC的问题,具体就是:老年代使用的是哪中垃圾 ...

  9. 成为JavaGC专家(1)—深入浅出Java垃圾回收机制

    转载自:http://www.importnew.com/1993.html 对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解GC ...

随机推荐

  1. Oracle备份表结构和数据

    --创建一份表结构 create table BASE_GOODSPAYMENT_SETTING_BAK as select * from BASE_GOODSPAYMENT_SETTING ; -- ...

  2. 后缀数组---Musical Theme

    POJ   1743 Description A musical melody is represented as a sequence of N (1<=N<=20000)notes t ...

  3. (旧)子数涵数·VB——变量

    最近,VB吧频繁出现如下图所示的帖子(现在C吧.VB吧等都已经被二级考生玩坏了) 这主要用到的是变量的概念 首先,我们来看一下变量的数据类型 当然,就这题而言,数据类型不是重点,主要考察的是变量的作用 ...

  4. <s:iterator>各种遍历用法

    struts2<S:iterator>遍历map小结 1.MapAction.java import java.util.ArrayList;   import java.util.Has ...

  5. SDK Build Tools revision (19.0.3) is too low for project Min

    SDK Build Tools revision (19.0.3) is too low for project Min(转)       如果你正在使用Android Studio工具进行开发,且将 ...

  6. webpack常用的插件安装命令

    webpack常用的插件安装命令:1:npm install html-webpack-plugin --save-dev //自动快速的帮我们生成HTML.2:npm install css-loa ...

  7. js中的排序

    不靠谱的sort() 众所周知,js中的sort()排序是按字母表顺序排序的,这就导致如下现象: var a = [9,60,111,55,8,7777]; a.sort(); alert(a); / ...

  8. Bootstrap 我的学习记录4 轮播图的使用和理解

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  9. offset笔记

    1.offsetParent 2.offsetTop 3.offsetLeft 4.offsetWidth 5.offsetHeight offsetWidth是元素的可视宽度,这个宽度包括元素的边框 ...

  10. HDFS主要特性和体系结构

    引言 Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时,它和其他的分布式文件系统 ...