`
xdgj
  • 浏览: 36231 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

实现自己的事件(一)

    博客分类:
  • Java
阅读更多

当程序的某个模块被调用的时刻不确定,就类似于等待某个事件的发生。这时,可以定义自己的事件进行相应的处理。比如,等待用户的一次输入等。Java的事件模型依赖于委托,通过回调方法进行相应的事件处理。在事件源中,会有fireXXXEvent()就是激活相应的事件,其中会遍历事件源的监听器队列,调用相应监听器的事件处理的回调方法。当某个事件发生时,事件源会调用fireXXXEvent()。实现自己的事件时,需要定义相应的事件类型、事件监听器、事件源。这里可以把事件和事件源定义为接口,方便日后扩展。

      这里,我实现的事件是一个定时器事件,当时间过了指定间隔,触发事件。其实,只需要一个Timer就可以实现这个功能,但实在没有找到好的例子。事件源ConcretEventSource有Timer属性,在指定时间间隔到达时,调用fireTimeUp激活所有的事件监听器,从而实现了事件处理。

事件类

view plaincopy to clipboardprint?
package eventmodelstudy;  
 
import java.awt.event.ActionEvent;  
import java.awt.event.ActionListener;  
import java.util.Date;  
import java.util.Iterator;  
import java.util.Vector;  
import javax.swing.Timer;
import java.awt.BorderLayout;  
import javax.swing.JFrame;  
import javax.swing.JLabel; 
/** 
 * 定时器事件,属性可以保存有用的信息,包括事件源 
 * @author Administrator 
 */ 

class TimerEvent{  
    private TimerEventSource source;//事件源  
    private String time;//当前时间  
    public TimerEvent(TimerEventSource source,String time){  
        this.source=source;  
        this.time=time;  
    }  
    public Object getSource(){  
        return this.source;  
    }  
    public String getTime(){  
        return this.time;  
    }  


/** 
 * 定时器事件源接口,可以添加、删除定时器事件监听器 
 * @author Administrator 
 */ 
interface TimerEventSource {  
    public void addTimerListener(TimerListener tl);  
    public void removeTimerListener(TimerListener tl);  

 
/** 
 * 定时器事件源具体的实现类。当时间到时激活监听器,调用所有监听器的回调方法回调方法 
 * @author Administrator 
 */ 
class ConcretEventSource implements TimerEventSource{  
    private Timer timer;  
    //监听器队列,保存所有注册的监听器  
    private Vector<TimerListener> eventQueue=new Vector();  
    public ConcretEventSource(int timeGap){  
        timer=new Timer(timeGap,new ActionListener(){  
 
            public void actionPerformed(ActionEvent e) {  
                //当时间到时,激活监听器  
                fireTimeUp();  
            }  
 
        });  
        timer.start();  
    }  
   
    public void addTimerListener(TimerListener tl) {  
        eventQueue.add(tl);  
    }  
 
    public void removeTimerListener(TimerListener tl) {  
        eventQueue.remove(tl);  
    }  
 
    private void fireTimeUp(){  
        Iterator<TimerListener> iter=eventQueue.iterator();  
        TimerListener tl;  
        while(iter.hasNext()){  
            tl=iter.next();  
            //回调监听器的方法,进行时间处理  
            tl.timeUp(new TimerEvent(this,new Date().toString()));  
        }  
    }  


/** 
 * 定时器事件监听接口 
 * @author Administrator 
 */ 
interface TimerListener {  
    //当时间到时,进行处理  
    public void timeUp(TimerEvent e);  

 
/** 
 * 
 * @author Administrator 
 */ 
public class Test extends JFrame implements TimerListener{  
    private JLabel show=new JLabel();  
    public Test(){  
        add(show,BorderLayout.CENTER);  
        setTitle("EventModel");  
        setSize(200,100);  
        setVisible(true);  
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
    }  
    public void timeUp(TimerEvent e) {  
        show.setText(e.getTime());  
    }  
    public static void main(String[] args) {  
        // TODO code application logic here  
        ConcretEventSource s=new ConcretEventSource(1000);  
        s.addTimerListener(new Test());  
        s.addTimerListener(new TimerListener(){  
 
            public void timeUp(TimerEvent e) {  
                System.out.println(e.getTime());  
            }  
 
        });  
    }  

 

 

 


本文来自CSDN博客:http://blog.csdn.net/chosen0ne/archive/2009/09/26/4595373.aspx

分享到:
评论

相关推荐

    html5+css3实现圆分成四个扇形,并有点击事件

    】做一个圆:周围4个扇形,有点击事件(html5+css3实现扇形),html5+css3实现圆分成四个扇形,并有点击事件。使用的是vue,但是可以提取为html+css,自己提取

    jquery实现快捷键事件,自己做一个快捷键

    学习起来很方便,代码完整,一学就会,资源实现的是选中一行按下快捷键弹出对话框,可以编辑然后保存

    js实现的鼠标事件

    自己写的一个,用js实现的,非常简单的实现的动态事件,当鼠标离开表单的时候,实现动态事件

    Android代码-如何自己实现一个 EventBus

    如何自己实现一个 EventBus Dependency compile 'com.werb.eventbuskotlin:eventbuskotlin:0.2.0' or implementation 'com.werb.eventbuskotlin:eventbuskotlin:0.2.0' 注册和取消注册 EventBus.register(this) ...

    C#Winform调用Windows API user32.dll实现鼠标事件示例-自动点击工具

    之前工作时需要固定点击屏幕上一位置的button,即使人不在工位也需要,就想起了按键精灵,但转念一想自己会使用C#为何不自行写一个小工具呢 主要是调用Windows API user32.dll动态库,将其引入到项目之中,此为非...

    C++中事件机制的简洁实现

    现在VC11可以用在XP下了,那么痛快的拿起C++11提供的先进设施组合出一个轻便的实现吧。  为了达到简洁的目的,需要放弃一些特性:  1、不支持判断函数是否已经绑定过(因为std::function不提供比较方法,自己...

    Android开发实现Fragment监听返回键事件功能的方法

    本文实例讲述了Android开发实现Fragment监听返回键事件功能的方法。分享给大家供大家参考,具体如下: 前面的文章Android开发教程之Fragment定义、创建与使用方法详细讲述了Fragment的基本概念与用法。这里再来分析...

    Android在Fragment中实现监听触摸事件

    本文给大家介绍的是监听Fragment的触摸事件实现。如果大家有更好的机制,可以留言交流,下面来看看详细的介绍: 大家都知道,我们的activity中有onTouchEvent方法,...我的方法是,自己实现触摸事件的分发。 先定义一个

    jQuery实现自定义事件的方法

    你可以实现创建,绑定事件,可触发自己定义的jQuery事件。 自定义事件触发 下面的代码是它自定义事件触发。你可以绑定到这个自定义事件。 $event.trigger("myEventName"); 自定义事件绑定 下面的代码创建了一个...

    一个拖拽网页元素实现移位和互换位置的JS插件;

    1、基于JQUREY1.8.0; 2、通过绑定一个Class类名,实现对这些元素的拖拽,并实现移位功能; 2、通过绑定一个Class...4、支持拖拽回调事件,通过回调,用户可以实现自己的业务处理; 5、使用简单便捷,具体可看案例;

    JS鼠标3次点击事件实现代码及扩展思路

    1、制作一个通用的事件处理模块(原生实现) 以下实现基于AMD定义模块方式: /** * 浏览器兼容事件处理组件 */ define(function () { var EventUtil = { // 添加事件监听 addHandler: function (element, type...

    python使用Qt界面以及逻辑实现方法

    pyQt只是个界面,只会生成界面即UI,就算是一个按钮也需要在python只自己写。不会想当然的找槽函数自动生成那么简单了。 安装pyQt5 pip3 install pyQt  安装设计器 pip3 install pyQt-tools 打开Qt5tools中的设计...

    silverlight dataGrid 模拟双击一行事件

    silverlight 4 + vs 2010 + xp 实现了dataGrid双击一行响应事件,代码大不份来自网络,自己做了个Dome 免分下载

    【JavaScript源代码】使用vue3实现一个人喵交流小程序.docx

    使用vue3实现一个人喵交流小...我也曾经搜索过有没有宠物翻译的软件,现在自己来实现一个吧[手动狗头]。 微信小程序是不支持直接使用 vue 进行开发的,但目前行业中已经有不少解决方案去支持用各种开发框架开发跨端

    移动端html5模拟长按事件的实现方法

    这个需求其实在app上很常见,但是在移动端h5中,我们没有长按的事件,所以就需要自己模拟这个事件了。 大概效果如下: ps: 为了做个gif还下了app,还得通过邮件发到电脑上,脑瓜疼。。 思路 放弃click事件,通过...

    操作系统作业(进程控制管理实现)

    实验要求:进程控制管理实现 ...每次事件处理后应形象地显示出当前系统中的执行进程是哪一个,就绪队列和阻塞队列分别包含哪些进程。 自己做的 java图形界面 增加了内存管理的模拟并采用了最佳适应算法。

    C# 事件委托简单封装示例

    C# 事件委托简单封装示例,按照基本步骤实现对事件委托的一个简单封装。通常可封装在自定义控件,或者业务方法中

    Qt自定义事件Demo

    为了实现自定义事件,你需要继承自`QEvent`类,并定义你自己的事件类型。然后,你可以在需要的时候创建自定义事件对象,并将它们发送给事件接收者。以下是如何使用Qt的自定义事件的说明和示例: **使用说明:** 1....

    React+Antd+Redux实现待办事件的方法

    今天我就来分享一个也是入门级别的,React+Redux+antd来实现简单的待办事件。同时也讲讲自己对Redux的理解。先来看一张图吧: 我们简单的比喻来让我们更加好的理解Redux,我们这样比喻(图书馆借书): 1.React ...

    工控安全职业证书技能实践:攻击事件技术实现及检测特征分析.pptx

    攻击事件技术实现及检测特征分析 CONTENTS 工控安全职业证书 攻击事件背景 01 近日,国内外多家媒体相继报道了Stuxnet蠕虫对西门子公司的数据采集与监控系统SIMATIC WinCC进行攻击的事件,称其为“超级病毒”、...

Global site tag (gtag.js) - Google Analytics