登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

学无止境

一点积累,与大家分享

 
 
 

日志

 
 

事件机制  

2010-08-10 14:14:02|  分类: java技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
[ 2006-04-16 21:34:06 | 作者: yuhen ]
 
有关 Java 事件机制的细节本文不做详述。
import java.util.*;

// 定义一个类似 C# EventArgs 的类用来传递事件状态信息。
// 一般要求继承自 java.util.EventObject,且以 Event 结尾。
class ClicktEvent extends EventObject{
public DemoBean source;

public ClickEvent(DemoBean source) {
super(source);
this.source = source;
}
}

// 定义事件原型,类似 C# event delegate。
// 一般要求继承自 java.util.EventListener,且以 Listener 结尾。
interface ClickListener extends EventListener {
void click(ClicktEvent e);
}

// 定义演示控件类
class DemoBean {

// 存储多个订阅者引用。
private Vector clicks = new Vector();

// 添加事件订阅。一般以 add<ListenerType>(<ListenerType> listener)方式拼写,并添加 synchronized 关键字。
public synchronized void addExampleListener(ClickListener listener) {
clicks.add(listener);
}

// 移除事件订阅。一般以 remove<ListenerType>(<ListenerType> listener)方式拼写,并添加 synchronized 关键字。
public synchronized void removeExampleListener(ClickListener listener) {
clicks.remove(listener);
}

// 触发事件。
protected void doClickEvent() {

// 锁定,避免在触发期间有事件被订阅或移除。
synchronized (this) {

// 创建事件状态对象。
ClicktEvent ce = new ClickEvent(this);

// 循环触发所有的事件订阅方法。
for (int i = 0; i < clicks.size(); i++) {
ClickListener e = (ClickListener)clicks.get(i);
e.click(ce);
}
}
}

// 模拟点击操作。
public void Click() {
doClickEvent();
}
}

public class Program {

public static void main(String[] args) {

// 创建控件。
DemoBean bean = new DemoBean();

// 添加事件订阅。
bean.addExampleListener(
// 使用内部匿名类创建事件处理对象。
new ClickListener() {
public void click(ClicktEvent e){
System.out.println(e.toString() + " clicked!");
}
}
);

// 模拟触发点击操作。
bean.Click();
}
}

输出
ClicktEvent[source=DemoBean@1a46e30] clicked!
  评论这张
 
阅读(465)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018