Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » Java SE 综合讨论区  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
作者 java 事件处理演示. (转贴CSDN)
wmgreat



CJSDN高级会员


发贴: 286
积分: 105
于 2003-03-05 09:00 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
// java 事件处理演示.
// 本演示代码旨在说明 java 对事件处理的模型, 这个模型的关键就是匿名内部类.
// 关键字: anonymous inner class (匿名内部类)
// 作者: realdreamer

//事件接口, 封装事件被引发后, 被调用的方法原型.
interface MyEvent{
//修改前向实体确认, 返回 true, 将修改它,
//返回 false, 不做修改并且 onValueChanged 也不会引发
public boolean onBeforeChange(int newValue);
public void onValueChanged(int currValue);
}

//事件源, MyEvent 的相关事件将由它来引发
class EventSource {
private int i;
private MyEvent e;

public void setValue(int i) {
if (e != null) {
if (e.onBeforeChangeLight Bulb) {
this.i = i;
e.onValueChanged(this.i);
}
}

this.i = i;
}
public int getValue() {
return this.i;
}
public void addMyEventListener(MyEvent e) {
this.e = e;
}
}

////////////////////////////////////////////////////
////////////////////////////////////////////////////
//在 java 类库中, 有一大堆事件, 像上面一个类和一个接口的定义就是一个简单的模拟.
//你可以把类 EventSource 想象成 JButton, 把接口想象成 ActionListener.
//如果我说得这么浅显你都不明白, 那你该........那个什么了.........
//大多数情况下, 我们只是 java 类库的使用者, 我们
//该如何正确而清淅的使用java类库中的事件模型呢?
//继续往下看:

class EventReceipter {
EventSource es1;
EventSource es2;
EventSource es3;


//三个事件监听器实例, 这里用了 java 的内部匿名类,
//这三个匿名内部类实现了MyEvent接口的方法
//这些方法将调用转发到外部类的方法上.
//java 内部匿名类的语法让事件监听的实现具有很大灵活性.
//这与 c# 中的事件模型是类似的, c# 编译器进行了一些事件转发帮助.
//在 microsoft c++ 7.0 扩展中, 事件模型得到了统一, 在语义上是与java一致的.
MyEvent listener1 = new MyEvent(){
public boolean onBeforeChange(int newValue) {
return onMyMember1_BeforeChange(newValue);
}
public void onValueChanged(int currValue) {
onMyMember1_ValueChanged(currValue);
}
};
MyEvent listener2 = new MyEvent() {
public boolean onBeforeChange(int newValue) {
return onMyMember2_BeforeChange(newValue);
}
public void onValueChanged(int currValue) {
onMyMember2_ValueChanged(currValue);
}
};
MyEvent listener3 = new MyEvent() {
public boolean onBeforeChange(int newValue) {
return onMyMember3_BeforeChange(newValue);
}
public void onValueChanged(int currValue) {
onMyMember3_ValueChanged(currValue);
}
};


public boolean onMyMember1_BeforeChange(int newValue) {
//.. do something
return false;
}
public void onMyMember1_ValueChanged(int currValue) {
//.. do something
}
public boolean onMyMember2_BeforeChange(int newValue) {
//.. do something
System.out.println("ok, can change it, the value will be " + newValue);
return true;
}
public void onMyMember2_ValueChanged(int currValue) {
//.. do something
System.out.println("changed. the value is " + currValue);
}
public boolean onMyMember3_BeforeChange(int newValue) {
//.. do something
return false;
}
public void onMyMember3_ValueChanged(int currValue) {
//.. do something
}

//构造函数
public EventReceipter () {
//创建对象
es1 = new EventSource();
es2 = new EventSource();
es3 = new EventSource();

//添加对象的监听器
es1.addMyEventListener(listener1);
es2.addMyEventListener(listener2);
es3.addMyEventListener(listener3);
}
}

class EventStudy {
public static void main(String args[]) {
//创建实现, 并调用实例成员 es2 的方法 setValue.
//这将引发事件. 控制台打印事件结果
new EventReceipter().es2.setValue(12345);
}
}

// 总结, 这个演示事实上实现了基本的所谓 framework.
// EventReceipter 是应用程序中的主要类.
// 它的三个成员 es1, es2, es3, 是组成类的重要元素.
// 类 EventReceipter 构造函数中初始化三个成员
// 最后, 对成员的访问生成相应的事件, 并处理事件.
// 一切都那么和谐.......
// 欢迎各位发表自己的任何看法.....




话题树型展开
人气 标题 作者 字数 发贴时间
7523 java 事件处理演示. (转贴CSDN) wmgreat 3923 2003-03-05 09:00

flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923