java事件。
来源:互联网 发布:java prototype 编辑:程序博客网 时间:2024/05/18 02:27
事件一共有三个主体。
1.事件源(Source Object),事件的发起者。
2.监听器(Listener),监听事件的人。
3.事件(Event)本身。
举个栗子:
你在看某个漂亮小姐姐的直播,当这个小姐姐给你唱了首歌的时候,你给他打赏了一个土豪飞机礼物。
1.上面这句话中,小姐姐是事件源,而你则是监听器,监听着小姐姐。
2.小姐姐唱歌了,你则打赏了礼物。这两个步骤是一个连贯的事情,而这个事情可以清楚的知道事件源和做出反应的人是谁。
流程:在事件源中注册监听器,当满足了一定条件之后调用监听器的方法,创建一个事件对象作为参数传进去。而事件对象中记录了事件源
java.util.EventListener
所有监听器必须实现该接口,该接口没有任何方法只是一个规范。
java.util.EventObject
该类为事件对象本身。类中有成员变量专门记录事件源。即发起事件的对象。
/** * 事件源 * * Created by Max on 2017/8/11. */public class XiaoJieJie { //注册事件 private EventListener eventListener; private int age; XiaoJieJie(){}; XiaoJieJie(EventListener eventListener){ this.eventListener = eventListener; } //唱歌 public void sing(){ ++age; if(eventListener != null){ //调用注册器方法。新建事件对象,当前对象为事件源。 ((MyEventListener)eventListener).daShang(new MyEvent(this)); } } public EventListener getEventListener() { return eventListener; } public void setEventListener(EventListener eventListener) { this.eventListener = eventListener; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
/** * 监听器 * * Created by Max on 2017/8/11. */public class MyEventListener implements EventListener { //监听着 private String name; MyEventListener(String name){ this.name = name; } //打赏方法 void daShang(MyEvent event){ System.out.println("小姐姐唱歌了," + name + "打赏土豪飞机礼物了~"); }}
/** * 事件对象,作为参数传给监听器,事件对象中记录了事件源。 * * Created by Max on 2017/8/11. */public class MyEvent extends EventObject { /** * Constructs a prototypical Event. * * @param source The object on which the Event initially occurred. * @throws IllegalArgumentException if source is null. */ public MyEvent(Object source) { super(source); } //获取事件源 public Object getEventSource(){ return getSource(); }}
public class Test { public static void main(String[] args) { XiaoJieJie p = new XiaoJieJie(new MyEventListener("张三")); p.sing();//输出 小姐姐唱歌了,张三打赏土豪飞机礼物了~ }}
监听一件事情是可以被代理的,有一天你有事情,晚上不能给小姐姐打赏,但是你可以让你室友来帮你做这件事情。
让他来帮你打赏,要注意的是,此时事情的发起者是小姐姐,逻辑上来说意图监听这件事情的人还是你,只不过你室友在帮你监听而已。
java.util.
EventListenerProxy<T extends EventListener>
该抽象类可以帮你代理你自定义的事件。
/** * 事件注册代理 * * Created by Max on 2017/8/11. */public class MyEventListenerProxy extends EventListenerProxy<MyEventListener> { //代理者 private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } /** * Creates a proxy for the specified listener. * * @param listener the listener object */ public MyEventListenerProxy(MyEventListener listener) { super(listener); } public void register(XiaoJieJie p){ p.setEventListener(getListener()); }}public class Test { public static void main(String[] args) {// XiaoJieJie p = new XiaoJieJie(new MyEventListener("张三"));// p.sing();//输出 小姐姐唱歌了,张三打赏土豪飞机礼物了~ XiaoJieJie p1 = new XiaoJieJie(); //李四基友帮助李四完成打赏这件事情。 MyEventListenerProxy eventListenerProxy = new MyEventListenerProxy(new MyEventListener("李四")); eventListenerProxy.setName("李四基友"); eventListenerProxy.register(p1); p1.sing();//输出 小姐姐唱歌了,李四打赏土豪飞机礼物了~ }}
阅读全文
0 0
- Java事件
- java事件
- java事件
- java事件
- java 事件
- java事件。
- java事件
- Java事件机制---自定义事件
- Java事件机制---自定义事件
- 【JAVA】Java事件模型
- 自定义事件(java)
- java的事件处理
- Java事件处理模式
- Java的事件模型
- java的事件处理
- Java检测鼠标事件
- 理解JAvA中的事件
- JAVA事件的总结
- 欢迎使用CSDN-markdown编辑器
- 怎样查看win10下Python安装路径?
- POJ 1195 Mobile phones(二维树状数组)
- 【学习笔记】C# 接口
- linux配置pycharm的mysql
- java事件。
- 常用快捷键
- Unity动画过渡
- expdp导出报错ORA-39002、ORA-39070解决办法
- Node.js简单操作
- linux上杀进程
- 【Linux 内核网络协议栈源码剖析】sendto 函数剖析
- [Leetcode] 24, 25, 138
- 3 Tesseract-ocr 系列 : 安装 jTessBoxEditor,结合tesseract-ocr-3.4 训练