说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

最近学习 java , 偶获心得, 贴出来与大家分享. 关键字: 事件处理, 匿名内部类

编辑:说三道四文库 发布时间:2017-11-23 01:42
HTML文档下载 WORD文档下载 PDF文档下载
// 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.onBeforeChange(i)) {
                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 构造函数中初始化三个成员
// 最后, 对成员的访问生成相应的事件, 并处理事件. 
// 一切都那么和谐.......
// 欢迎各位发表自己的任何看法.....

这种贴俺是非常非常支持的,楼主有心了
支持!!!!
up
不好意思,现在来不及看,现收藏一下
支持
支持一下
非常支持!
太好了,我正在因此而困扰呢~
感谢!
非常好,谢谢。
学习。。。。
支持,谢谢!
顶~~~
CSDN好人多,谢谢
加入mybase,good,thank you!
不错,应该支持和鼓励楼主,希望以后有更多这样的帖子,大家共同进步
楼主加油啊
严重支持~

:)
果然有见地!
厉害厉害!佩服佩服!

祝你好运!
好人!
hao
不错,希望楼主以后有更多这样的好文章涌现
这种好的心得应该多些发表
收藏:)
有劳楼主了:)
看了半天才明白原来楼主在讲解java中的事件处理机制(原理).
值得学习!!!!
不过没有搞懂为什么在java的事件处理机制中内部匿名类是关键呢?希望楼主能给一个解释!

我觉得里面的关键应该还是事件源类中关于成员方法的处理
三人行必有我师
ychotman(hotman) 说得对,关键是事件源中激发事件的方法,请问怎样编写串口事件?
先想收藏,再请
搂主解释一下,弄不明白。谢谢。
我一般编写事件都是:
1:新建一个继承于EventObject的事件类;
2:新建一个事件接口;
3:在写关于我的事件类的Prepro...("属性"那个单词,忘了)或ChangEvent变化的类;
这应该是自定义事件的标准做法吧.?
支持,我顶
收藏:)
有劳楼主了:)
厉害,博学,大度。
支持
先收藏

学习
好东西
请问能不能把自定义事件的标准再讲详细点,谢谢
楼主能把所学花宝贵时间总结并发表出来,精神实在难能可贵,不顶对不起这种精神
多谢指导,小弟希望各位高手要是有什么心得的话来和大家一起分享,谢谢
在发布前,第一代iPhone其实并不完善 市场占有率调查:iOS 7秒杀Android 4.4 AWS会赢、OpenStack会消亡、Connected Cars可防僵尸攻击 谷歌以32亿美金收购iPod之父的创业公司Nest 物联网时代来临 微软2014,有你期待的吗? 映趣科技发布inWatch Z/inWatch X 后者采用全彩透明柔性屏 程序员没有天才:暴风影音首席架构师鲍金龙访谈 开放式创新改变世界——OpenStack生态系统将重新洗牌 Java 8最终发布日期敲定,即使有bug也要发布 Meteor PK Django,谁更适合开发实时Web应用? 学编程就像选家具:去宜家还是从种树开始? 前车之鉴 十二个年度最差设计网站汇集 冷暖交替,2014年编程兴衰趋势预测 诺基亚出Android手机,微软或将受惠 苹果不收购Nest的大猜想 Netflix开源S3一致性提升利器S3mper Fi 《近匠》第06期:UCloud——目标!完整云服务 小三上位:Windows Phone不容忽视的契机 “详解Visual Studio 2013”全国巡讲北京站:无忧开发iOS及Android应用 Chrome最新版:快速静音及在Win8中建Chrome OS系统 雅虎COO Henrique de Castro因业绩不佳被解雇 分析比特币背后的数据算法,抢占背后巨大市场先机 美食菜谱将会成创业风口的两大理由 Windows XP杀毒软件更新 将被延至2015年7月 小心,商家已经盯上你了 一软一硬 让你时刻保持清醒的可穿戴产品 寓教于乐 贝瓦依托移动平台打造中国式儿童“轻教育” 中科创达:CES2014上的中国红 SA:2014年移动互联网十大技术创新预测 回顾2013:HBase的提升与挑战 Google打造云中Hadoop便捷版,强势对抗AWS 看BCB5的书,在BCB6编译是否完全能通过? 正义的高手门请伸出你们的手黑了这个彩票网站吧!(海南私人彩票害了很多人倾家荡产,家破人亡,我家也深受其害) ie突然打不开ftp网络了 我的MATRIX观----生命的究极存在形式 关闭窗口的问题 因为昨天晚上的积极表现。 我的真情告白·!#¥%…… 遇到了“Destination host unreachable.”,谁能简单的帮我分析一下出错的可能性。 关于安装windoew 2003的初级问题.解决立刻给分. 如何在LISTVIEW里输出打印? 现在你应该睡了~ 困了,睡觉去~~~~~~~~~ 有没有可能在outlook express中加入自已的按钮? 有没有可能在outlook express中加入自已的按钮? 一个sql表达式的问题 JBUILDER9中用代码改变程序的外观, 难?易?,如何写,见贴内,谢谢! 我的电脑里的g盘分区损坏(磁盘坏道)请问有没有补救的方法? 谁有培训教材,单位培训的?? 印章问题?? 如何实现文件上传?在线急等!!! 如何查询出数据库中相同的字段值??? 可以动态改变水晶报表的文本的内容吗? ASP.net提示无法调试 我下载了Fastreport 2.47的中文版,可是不知道怎么用! 请问我在VB.NET里面控制,把SQL里面的数据输出到Excel,但是有一列是000开头的,到Excel后怎么000就不见了呢? 哪位老大有asp.net和.net平台的电子书?可否共享一下? 请问JDK1.4里面主要包括哪些类包 一个初学者的问题? 计算机间发送消息的问题。 请教各位前辈KEIL C51调试的问题 DataGrid控件中如何用selectindexchang方法改变选中的行的颜色》 SOS!今天我的PB7.0里面的Library 和 DB Profile不能用了.(100分) Application 怎样接收参数,并传给窗体?谢谢! vb中执行access里面的查询 请高手详细指点,我的服务器win2000---server,现在想安装WIN2003--SERVER(在同一台服务器),把AD从2000server导出来,在到2003server 为什么要使用内存dc? 高手请告诉我wrox出版的《jsp编程指南》中的例子怎么用 (vital) JTable的两个问题??? 好久不来了,不过一有问题就想到这了,有劳各位了(分不够再加) 请问学J2EE如何学,工具及书籍如何选? ###救命啊:PB+EAServer 实现WEB的问题:这是我的PB不行吗? 上海日記:撞車 [***分享***]DBGRIDEH 组件在Borland开发工具中应用全攻略 上海日記:撞車解決了 如何去掉信使服务? Win98的开始菜单中的“运行”不见了,请问如何恢复? 各位大哥帮忙,这个公司要我的一段设计文档什么的 难题!DCOM中能不能固定某个端口,或某段端口 ████在水晶报表8.5里面如何控制打印尺寸████ 我要关机!!! 哪个大侠有活动下拉菜单的源代码(----急啊 求教一道vfp题,求数列2/1、3/2、5/3、8/5.的前20项之和a=1b=2sum=0term=b/afor i=1 to 20sum=sum+term t=bb=a+ba=tterm=b/aendfor"sum=",sum求高手逐步讲解. VFP双重循环 P = +3!+5!+……+15!急 世界一词的出处,和最初的含义```如题``请各位大大不吝赐教~ harness labor什么意思 ( )可以毫不在意地在海葵有毒的触手间穿行 A、大黄鱼 B、鳕鱼 C、鮣鱼 D、三带双锯鱼 这是什么微生物?有点像海葵,有触手,一靠近会缩回去,对鱼缸危害大吗 深山风雪路阅读答案 1.仔细阅读1-4自然段,老吕工作的环境是怎样的?2.写出文中描写脚印的句子,想一想2.写出文中描写脚印的句子,想一想每次都说明了什么?3.你觉得老吕是个怎样的人?今日13:3 内存卡出现两个相同的文件夹,无论对其中一个作任何修改另一个都会跟着改变,这难道就是所谓的量子纠缠现象 只要回答题目中方向与ad边垂直并与线框平面成45°角这句话怎么理解既然与线框平面成45度不是也和ab边成45度吗 Wish we can in harness forever什么意思 follow you in harness very 男子患病“变形”却不“金刚” 被迫宅永嘉一家六口当老鸨栽了非洲多国出现罕见混合型日食克里访开罗寻求修复美埃关系长兴3万株古银杏披“金”衣与青山翠竹浙江富阳万市镇“银杏之秋”开游式在杭常山举行处置村级组织换届群体性突发事湖南三姐弟上学途中遇害 学校:校车司周四“立冬” 接下来雾霾可能会是杭州中央第二轮10巡视组全部进驻 重点纠地方政府放权缓慢遭质疑 官员:有些权奢侈品巨头齐聚首,康泰纳仕时尚设计培年中冲量大促 分期专场特惠活动成功举消失在大西洋的Tamaya,这些幽灵让这三种色颜色,点亮你最美的夏天看了这些车载小物,开始后悔买了高配没春夏跑步,女神要如何挑选跑步鞋你和纤瘦大长腿的距离就差这一条裤子减肥的时候,也只有这些零食可以随便吃涂再多护肤品皮肤还是干黄油,元凶在这何必要乱花钱!最实用的车品也就这7件显微镜下毛孔有多脏!脸干净不等于毛孔
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘