- 浏览: 452753 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
进退取舍:
谢谢,这个用上了!!
Java 一个线程池的示例 -
pb_water:
感谢楼主,打算买楼主的书,支持一下,楼主功德无量
JavaScript内核系列第0版整理稿下载 -
lancezhcj:
有图会直观的多呢,再摸索摸索
有限自动机与建模 -
hsmsyy:
这里应该是原创了吧,楼主我觉得闭包的作用:实现面向对象。有待商 ...
JavaScript内核系列 第7章 闭包 -
wll52:
在应用退出之前,需要释放连接 con.disconnect() ...
使用smack与GTalk通信
前言
事件监听器是经常可以遇到的一种设计模式,一般用在这样一种场景下:当模块的一部分A在完成后需要通知其他的软件模块B,而等待通知的模块B在事先不需要采用轮询的方式来查看另一个模块A是否通知自己。即,当某事件发生,则监听器立刻就知道了该事件。这种模式大量的应用在GUI设计中,比如按钮的点击,状态栏上状态的改变等等。
接口的设计
我们需要一个对事件(event)的抽象,同样需要一个对监听器(listener)的抽象。我们可以把接口抽的很简单:
这个是事件源的接口,只需要提供一个可以获取事件类型的方法即可:
public interface EventSource {
public final int EVENT_TIMEOUT = 1;
public final int EVENT_OVERFLOW = 2;
/**
* get an integer to identify a special event
* @return
*/
public int getEventType();
}
/**
* @author juntao.qiu
*/
public interface EventListener {
/**
* handle the event when it raise
* @param event
*/
public void handleEvent(EventSource event);
}
事件和监听器框架类图
实例化事件
我们举一个实现了事件源接口(EventSource)的类TimeoutEvent 来说明如何使用事件监听器模型:
import listenerdemo.framework.*;
public class TimeOutEvent implements EventSource{
private int type;
public TimeOutEvent(){
this.type = EventSource.EVENT_TIMEOUT;;
}
public int getEventType() {
return this.type;
}
}
import listenerdemo.framework.*;
/**
* @author juntao.qiu
*/
public class Timer extends Thread{
private EventListener listener;
private int sleepSeconds;
public Timer(int seconds){
this.sleepSeconds = seconds;
}
public void setEventListener(EventListener listener){
this.listener = listener;
}
public void run(){
for(int i = sleepSeconds;i>0;i--){
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
System.err.println(ex.getMessage());
}
}
raiseTimeoutEvent();//raise一个TimeOut事件给监听器
}
private void raiseTimeoutEvent(){
this.listener.handleEvent(new TimeOutEvent());
}
}
使用事件及其监听器
在类Tester的execute()方法中,我们先设置一个定时器,这个定时器初始化为3秒,设置好定时器后,程序进入一个while(true)循环中,当定时器到时后,它会发送一个timeout事件给当前线程Tester,此时我们可以设置execute中的while条件为false,退出死循环。流程很清晰了,我们来看看代码:
package listenerdemo;
import listenerdemo.framework.*;
/**
* @author juntao.qiu
*/
public class EventListenerTester implements EventListener{
private boolean loop = true;
public void execute(){
Timer timer = new Timer(3);//初始化一个定时器
timer.setEventListener(this);//设置本类为监听器
timer.start();
while(loop){
try{
Thread.sleep(1000);
System.out.println("still in while(true) loop");
}catch(Exception e){
System.err.println(e.getMessage());
}
}
System.out.println("interupted by time out event");
}
//实现了EventListener接口
public void handleEvent(EventSource event) {
int eType = event.getEventType();
switch(eType){//判断事件类型,我们可以有很多种的事件
case EventSource.EVENT_TIMEOUT:
this.loop = false;
break;
case EventSource.EVENT_OVERFLOW:
break;
default:
this.loop = true;
break;
}
}
public static void main(String[] args){
EventListenerTester tester = new EventListenerTester();
tester.execute();
}
}
still in while(true) loop
still in while(true) loop
still in while(true) loop
interupted by time out event
发表评论
-
JavaScript内核系列 第15章 服务器端的JavaScript
2012-02-12 21:39 2335第15章已经在icodeit上发布,这一章分为上/下两篇,请朋 ... -
使用vim开发python及graphviz绘图
2011-12-23 14:49 6463基本需求 使用vim中的autocmd命令可以很容易的将正在 ... -
Java脚本技术应用实例
2011-01-22 11:24 4276前言 一直以来都很喜欢可以自由扩展的软件,这一点应该已经在很 ... -
可编程计算器(phoc)的设计与实现
2011-01-17 11:34 1989前言 借助JavaScript脚本 ... -
函数式编程(javascirpt)
2009-04-18 22:18 1273前言 Javascript,有人称 ... -
C和指针
2009-05-21 23:15 1122前言 指针是C的灵魂,正是指针使得C存在了这么多年,而且将长 ... -
C和指针(续)
2009-05-25 23:41 1363前言 上一篇《C和指针》可能对关于C和指针的有些内容没有说透 ... -
有限自动机与建模
2009-06-06 10:48 1792前言 在学校学程序设计语言的时候,能接触到的所有例子没有一个 ... -
基于总线的消息服务(BBMS)的设计与实现
2009-07-25 22:19 1365前言 异步事件的通知机制在比较有规模的软件设计中必然会有涉及 ... -
JavaScript内核系列 第9章 函数式的Javascript
2010-05-13 19:20 3790第九章 函数式的Javascript 要说Ja ... -
JavaScript内核系列 第8章 面向对象的JavaScript(下)
2010-05-06 09:40 3675接上篇:JavaScript内核系列 第8章 面向对象的Jav ... -
JavaScript内核系列 第8章 面向对象的JavaScript(上)
2010-05-06 09:26 2914第八章 面向对象的 Javascript ... -
JavaScript内核系列 第7章 闭包
2010-05-04 08:48 3885第七章 闭包 闭包向来给包括JavaScript程序 ... -
JavaScript内核系列 第6章 正则表达式
2010-04-27 19:44 4060第六章 正则表达式 正则表达式是对字符串的结构 ... -
JavaScript内核系列 第5章 数组
2010-04-24 15:17 4543第五章 数组 JavaScript的数组也是一个比较 ... -
Swing小应用(Todo-List)之三
2010-04-22 20:47 2138前言 去年9月份开发的那个小工具sTodo,只是做到了能用, ... -
JavaScript内核系列 第4章 函数
2010-04-18 17:31 5097第四章 函数 函数,在C语言之类的过程式语言中 ... -
JavaScript内核系列 第3章 对象与JSON
2010-04-12 09:12 6147第三章 对象与JSON JavaScript对象与传 ... -
JavaScript内核系列 第2章 基本概念
2010-04-03 19:44 5704第二章 基本概念 ... -
JavaScript内核系列 第1章 前言及概述
2010-04-01 23:15 9971前言 从2006年第一次接触JavaScript至今,算来也 ...
相关推荐
Java Swing 常用事件和监听器接口 Java Swing 是一个功能强大的图形用户界面(GUI)工具包,它提供了许多事件和监听器接口,帮助开发者更好地处理用户交互。下面是 Java Swing 中常用的事件和监听器接口。 1. ...
在AWT中,事件处理是通过事件监听器接口来实现的,这些接口定义了特定类型的事件发生时需要调用的方法。下面我们将详细探讨Java AWT中的常见事件、监听器接口及其方法。 1. **ActionEvent** 和 **ActionListener**...
这些动作会触发程序中的特定行为,通常通过事件监听器来实现。本文将深入探讨事件处理监听器的概念,以及如何在Java或类似的面向对象语言中设置和使用它们。 首先,我们来理解“事件”这个概念。在UI编程中,事件是...
基于Android平台下Button控件单击事件和监听器的五种编写.pdf
事件监听器的实现方式有多种,本篇文章将介绍四种常见的事件监听器实现方式:自身类作为事件监听器、外部类作为事件监听器、匿名内部类作为事件监听器和内部类作为事件监听器。 1. 自身类作为事件监听器 在这个...
### Java事件和监听的区别 在Java编程语言中,事件(Event)与监听器(Listener)是构建用户交互界面的关键组成部分。...理解和掌握事件与监听器的概念及其工作原理,对于开发高质量的Java应用程序来说至关重要。
接下来,你需要一个事件监听器来响应这些事件。在Spring中,这可以通过实现`ApplicationListener`接口来完成。监听器将接收到`ApplicationEvent`的实例,并在其`onApplicationEvent`方法中处理事件。 ```java @...
2. 对某个源注册一个监听器,此源便成为一个事件源,当事件源上发生某一个动作时,监听器的某个方法将会被调用执行,在执行事件监听器的这个方法时,同时会把事件监听对象传递给此方法,开发人员在监听器中可以拿到...
在Android开发中,事件监听器(Event Listeners)是实现用户交互和响应各种事件的关键机制。标题提到的“android 外部类作为事件监听器类”是指将一个非匿名类(外部类)作为事件处理的对象,这在某些情况下可能是...
开发者可以根据需求创建自己的事件和监听器,通过发布和订阅机制实现特定的事件通知。 9. **listener_demo、listener_demo1、listener_demo2**: 这三个示例项目很可能是逐步进阶的,可能从基本的动作监听开始,...
Java监听器的实现可以分为三个部分:事件源、事件对象和事件监听器。事件源是指产生事件的对象,例如按钮、文本框等。事件对象是指事件的载体,用于传递事件信息。事件监听器是指负责处理事件的对象,例如点击按钮时...
当事件源(熊孩子)发生某个事件(洗手前的行为)时,就会创建事件对象(RemindWashingHandsEvent),随后触发事件监听器(RemindListener)的响应(提醒操作)。 更具体的实现可以参考Kid类和WashingHandsListener...
Servlet事件监听器允许开发者对特定的Servlet容器事件做出反应,而JSP则是用于创建动态网页的简便方式。这里我们将深入探讨这两个概念以及它们在实际应用中的使用。 一、Servlet事件监听器 Servlet事件监听器是...
在Android开发中,全局事件监听器是一种非常实用的设计模式,它允许开发者在整个应用程序范围内监听特定的事件,而无需在每个需要响应的类中都添加监听代码。标题中的"android全局事件监听器"指的是一个实现此类功能...
当你将一个类用作事件监听器时,你已经设置好一个特定的事件类型,它会用该类进行监听。接下来的操作是:一个匹配的监听器必须被加入到该组件中 组件被创建之后,可以在组件上调用如下方法来将监听器与它联系起来 ...
【Qt全局鼠标、键盘事件监听器库】是一个用于在Windows和Linux系统上实现跨平台的全局鼠标和键盘事件捕获的库。这个库基于流行的Qt框架,为开发者提供了一个便捷的方式来监听并处理系统的输入事件,无论是来自应用...
例如,针对鼠标滚轮和触摸事件,我们可以这样添加被动事件监听器: ```javascript document.addEventListener("mousewheel", fn, {passive: true}); ``` 但是,需要注意的是,并非所有浏览器都支持这个特性。因此...
本文将详细解析Java事件处理机制中事件监听器的四种实现方式:自身类作为事件监听器、外部类作为事件监听器、匿名内部类作为事件监听器以及内部类作为事件监听器。 1. **自身类作为事件监听器** 在自身类作为事件...
事件监听器是Android开发中的重要概念,用于捕捉和响应用户在界面上的各种交互操作。在Android中,事件监听器主要用于处理UI控件的点击、触摸、键盘输入等事件。本篇将详细介绍EditText的事件监听。 首先,我们来看...
工具方面,Windchill提供了一套完整的开发环境,如Windchill ProjectLink和Windchill Workgroup Manager,它们支持事件监听器的创建、部署和测试。此外,IDE如Eclipse,配合Windchill插件,可以方便地进行源代码的...