`
wandejun1012
  • 浏览: 2730933 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

EventListenerList举例

    博客分类:
  • java
 
阅读更多

package testCustomEvent;

import javax.swing.event.EventListenerList;   
import java.util.Date;   
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;   
import java.text.SimpleDateFormat;  
  
/**  
* Java的事件机制/自定义事件. 
 
运行结果:  
do something interesting in source here.  
listener detects [event]:wintys.event.MyEvent[source=wintys.event.MySource@18158  
59] [occur at]:2012-10-11 16:27:49  
listener detects [event]:wintys.event.MyEvent[source=wintys.event.MySource@18158  
59] [occur at]:2012-10-11 16:27:49 
 
* @version 2012-10-11  
* @author germmy(gogogo@gmail.com)  
* @see http://www.blogjava.net/gogogo  
*/   
public class MyEventTestNew implements MyListener{   
    public static void main(String[] args){   
        MySource source = new MySource(); 
        
        ActionListener al=new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				System.out.println("allllllllllllllll");
			}
        	
        };
        
        MyEventTestNew mtn=new MyEventTestNew();
        source.addMyListener(mtn); 
        source.addMyListener(al);
        source.doSomething();   
    }

	@Override
	public void doMyAction(MyEvent e) {
		 System.out.println("listener detects " + e);   
		
	}   
}  
  
/**  
* 自定义的事件.  
* @version 2012-10-11  
* @author germmy(gogogo@gmail.com)  
* @see http://www.blogjava.net/gogogo  
*/   
class MyEvent extends java.util.EventObject{   
    private Date date;//记录事件发生的时间  
  
    public MyEvent(Object source , Date date){   
        super(source);  
  
        this.date = date;   
    }  
  
    public String toString(){   
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");   
        String dt = df.format(date);  
  
        return "[event]:" + super.toString() + " [occur at]:" + dt;   
    }   
}  
  
/**  
* 自定义事件监听器接口.  
* @version 2012-10-11  
* @author germmy(gogogo@gmail.com)  
* @see http://www.blogjava.net/gogogo  
*/   
interface MyListener extends java.util.EventListener{   
    void doMyAction(MyEvent e);   
}  
  
/**  
* 自定义事件源.  
* @version 2012-10-11  
* @author germmy(gogogo@gmail.com)  
* @see http://www.blogjava.net/gogogo  
*/   
class MySource{   
    /**  
     * 保存注册的监听器列表.  
     * 子类可以使用它保存自己的事件监听器(非MyListener监听器)列表.  
     */   
    protected EventListenerList listenerList = new EventListenerList();   
    private MyEvent myEvent = null;//fireDoMyAction()使用此变量  
  
    /**  
     * 没有做任何事  
     */   
    public MySource(){   
    }   
    /**  
     * 添加一个MyListener监听器  
     */   
    public void addMyListener(MyListener listener){   
        listenerList.add(MyListener.class , listener);   
    }  
    
    /**  
     * 添加一个MyListener监听器  
     */   
    public void addMyListener(ActionListener al){   
        listenerList.add(ActionListener.class , al);   
    }  
  
    /**  
     * 移除一个已注册的MyListener监听器.  
     * 如果监听器列表中已有相同的监听器listener1、listener2,  
     * 并且listener1==listener2,  
     * 那么只移除最近注册的一个监听器。  
     */   
    public void removeMyListener(MyListener listener){   
        listenerList.remove(MyListener.class , listener);   
    }  
  
    /**  
     * @return 在此对象上监听的所有MyListener类型的监听器  
     */   
    public MyListener[] getMyListeners(){   
        return (MyListener[])listenerList.getListeners(MyListener.class);   
    }  
  
    
     */   
    protected void fireDoMyAction() {   
         // getListenerList() Guaranteed to return a non-null array   
         Object[] listeners = listenerList.getListenerList();   
         // Process the listeners last to first, notifying   
         // those that are interested in this event   
        for (int i = listeners.length-2; i>=0; i-=2) {   
            if (listeners[i]==MyListener.class) {   
                // Lazily create the event:   
                if (myEvent == null)   
                    myEvent = new MyEvent(this , new Date());   
                ((MyListener)listeners[i+1]).doMyAction(myEvent);   
            }  else if(listeners[i]==ActionListener.class) {
            	System.out.println("hahahahahaha");
            }
        }   
    }  
  
    /**  
     * 做一些事件源应该做的有意义的事,然后通知监听器.  
     * 这里只是一个示例方法.  
     * 例如:MySource如果是一个按钮,则doSomething()就可以命名为click(),  
     * 当用户点击按钮时调用click()方法.  
     */   
    public void doSomething() {   
        System.out.println("do something interesting here.");  
  
        fireDoMyAction();//通知监听器   
    }   
}  
 

 

eventListener里面其实是一个数组,将MyListener.class,ml分别放在数组的倒数第二位和倒数第一位。

 

这就是为什么在遍历listenerList时,数组要加2的原因。

 

分享到:
评论
1 楼 moyue 2012-04-13  
这个是你写的吗,如果是,那么你写的这个意义不大,请考虑怎么去触发事件,比方说,我现在有一个组件添加了自定义事件的listener,那么触发可能是在别的类中的组件,那么怎么去触发呢?

相关推荐

    H3C交换机 典型配置举例-6W100-ACL典型配置举例

    "H3C交换机典型配置举例-6W100-ACL典型配置举例" 本文将详细介绍H3C交换机中的ACL(Access Control List,访问控制列表)典型配置举例,包括允许指定的主机访问网络和拒绝指定的主机访问网络两种配置举例。 首先,...

    最新单片机仿真 文件包应用举例

    最新单片机仿真 文件包应用举例最新单片机仿真 文件包应用举例最新单片机仿真 文件包应用举例最新单片机仿真 文件包应用举例最新单片机仿真 文件包应用举例最新单片机仿真 文件包应用举例最新单片机仿真 文件包应用...

    最新单片机仿真 宏定义应用举例

    最新单片机仿真 宏定义应用举例最新单片机仿真 宏定义应用举例最新单片机仿真 宏定义应用举例最新单片机仿真 宏定义应用举例最新单片机仿真 宏定义应用举例最新单片机仿真 宏定义应用举例最新单片机仿真 宏定义应用...

    最新单片机仿真 条件编译应用举例

    最新单片机仿真 条件编译应用举例最新单片机仿真 条件编译应用举例最新单片机仿真 条件编译应用举例最新单片机仿真 条件编译应用举例最新单片机仿真 条件编译应用举例最新单片机仿真 条件编译应用举例最新单片机仿真...

    MVCC机制举例.xlsx

    MVCC机制举例

    Dijkstra算法应用举例

    "Dijkstra算法应用举例" Dijkstra算法是一种常用的图算法,用于寻找从起点到其他顶点的最短路径。下面是一个使用Dijkstra算法的应用举例,展示了如何使用该算法来解决实际问题。 从给定的代码中,我们可以看到,这...

    最新单片机仿真 内部函数intrins.h应用举例

    最新单片机仿真 内部函数intrins.h应用举例最新单片机仿真 内部函数intrins.h应用举例最新单片机仿真 内部函数intrins.h应用举例最新单片机仿真 内部函数intrins.h应用举例最新单片机仿真 内部函数intrins.h应用举例...

    最新单片机仿真 字符函数ctype.h应用举例

    最新单片机仿真 字符函数ctype.h应用举例最新单片机仿真 字符函数ctype.h应用举例最新单片机仿真 字符函数ctype.h应用举例最新单片机仿真 字符函数ctype.h应用举例最新单片机仿真 字符函数ctype.h应用举例最新单片机...

    ORACLE常用命令举例

    oracle 常用的命令举例,内容全面、实用

    最新单片机仿真 标准函数stdlib.h应用举例

    最新单片机仿真 标准函数stdlib.h应用举例最新单片机仿真 标准函数stdlib.h应用举例最新单片机仿真 标准函数stdlib.h应用举例最新单片机仿真 标准函数stdlib.h应用举例最新单片机仿真 标准函数stdlib.h应用举例最新...

    H3C 以太网交换机产品典型配置举例【V7版本】【共59章】.rar

    01-登录设备典型配置举例 02-RBAC典型配置举例 03-软件升级配置举例 04-ISSU典型配置举例 05-补丁包升级典型配置举例 06-以太网链路聚合典型配置举例 07-端口隔离配置举例 08-生成树典型配置举例 09-VLAN...

    最新单片机仿真 字符串函数string.h应用举例

    最新单片机仿真 字符串函数string.h应用举例最新单片机仿真 字符串函数string.h应用举例最新单片机仿真 字符串函数string.h应用举例最新单片机仿真 字符串函数string.h应用举例最新单片机仿真 字符串函数string.h...

    点对点通讯举例_TCP_labview中TCP举例_tcp_labview_点对点通信_

    本示例中的"点对点通讯举例_TCP Server.vi"和"点对点通讯举例_TCP Client.vi"文件分别代表TCP服务器端和客户端的LabVIEW程序。下面我们将详细讨论这两个方面: 1. **TCP服务器端**: - `点对点通讯举例_TCP Server...

    fseek函数使用举例

    fputc和fgetc函数 使用举例 C源代码 /* 用fseek函数可以实现改变文件的位置指针。 fseek(文件类型指针,位移量,起始点) “起始点”用0、1或2代替,0代表“文件开始”,1为“当前位置”,2为“文件末尾”。 例:在...

    计算机安全XSS 实际攻击举例

    计算机安全XSS 实际攻击举例 计算机安全是计算机系统和网络的安全保护,避免未经授权的访问、使用、披露、修改或破坏计算机系统和网络中的数据。黑客技术是计算机安全攻防技术的重要组成部分,其中包括XSS实际操作...

    CRF原理应用及举例.pdf

    深入理解条件随机场:包含其原理、应用及举例。CRF 就像一个反向的隐马尔可夫模型(HMM),两者都是用了马尔科夫链作为隐含变量的概率转移模型,只不过 HMM 使用隐含变量生成可观测状态,其生成概率有标注集统计得到,...

    生成树典型配置举例.

    生成树配置举例 简介 本文档介绍了生成树的配置举例。 配置前提 本文档中的配置均是在实验室环境下进行的配置和验证,配置前设备的所有参数均采用出厂时的 缺省配置。如果您已经对设备进行了配置,为了保证配置效果...

    JvavMath类功能的使用举例

    JvavMath类功能的使用举例,随机数

    分布式链接的应用举例

    分布式链接,以一种常微分的在链接上的应用举例!打码了传统的链接方式 !

    XILINX语法约束举例说明

    XILINX语法约束举例说明,列举了400多个xilinx语法约束的说明举例,便于学习xilinx约束

Global site tag (gtag.js) - Google Analytics