自定义监听器 java
发布日期:2021-06-30 17:50:59
浏览次数:3
分类:技术文章
本文共 2032 字,大约阅读时间需要 6 分钟。
监听器,实际上是一个回调函数,具体一点就是当代码执行到某一行的时候就会调用你预先设置好的语句。
这里我们有:
监听者时刻监听着事件源,当有事件源的时候,监听者就会知道发生了什么事!相似的,警察是监听者,嫌疑犯所干的事是事件源,嫌疑犯干什么事,警察都知道。
总体涉及到:事件、事件源(也就是事件的触发者,这里指嫌疑犯)、监听器(这里指警察);
相应地,我们写几个类或者接口:Event、EventSource、Listener
1、事件
package com.huai.mylisten;public class Event { private Object source; public Event(Object source){ this.source = source; } public Object getSource(){ return this.source; }}2、监听者(需要实现类)
package com.huai.mylisten;public interface Listener { void onMyEvent(Event event); }
3、监听者的实现类:
public class MyListener implements Listener{ @Override public void onMyEvent(Event event) { System.out.println(event.getSource()); } }
4、这时候,我们可以暂时写一个测试函数 package com.huai.mylisten;public class TempTest { public static void main(String[] args) { Event event = new Event("HelloWorld"); MyListener listener = new MyListener(); listener.onMyEvent(event); }}
可以看到,我们在main函数中实例化了事件和监听者的对象,同时在里面触发了监听的事件。但是,这个对于真正的监听器是有问题的,因为我们缺少了事件源,也就是嫌疑犯。好,下面我们就写事件源,同时让它来触发事件以及让监听者知道他正在干什么。
5、事件源
package com.huai.mylisten;import java.util.ArrayList;import java.util.List;public class EventSource { private List listenerList = new ArrayList<>(); public void addListener(Listener listener){ listenerList.add(listener); } public void doBadThing(){ //嫌疑犯所干的事 Event event = new Event("badthing"); //让所有的监听者(警察)知道,我干了这件事 for(Listener li : listenerList){ li.onMyEvent(event); } }}
从上面的事件源程序中我们可以看出,当嫌疑犯doBadThing的时候,就会有badthing这个事件产生,同时监听者就会知道。最后解释一下“监听者知道”具体指的是什么:从上面的程序中看到,我们直接调用了listener对象的onMyEvent(event)方法,所以,我们可以利用这个,在这个方法里面写我们自己实现的代码,当有doBadThing()的时候,采取相应的处理。这就是监听器。这个EventSource类可以类比一个按钮类,而doBadThing()这个函数便是点击按钮这个动作。每当点击按钮,就会new一个event事件,同时告诉监听者。
6、我们测试一些
package com.huai.mylisten;public class MainTest{ public static void main(String[] args) { EventSource eventSource = new EventSource(); eventSource.addListener(new MyListener()); eventSource.doBadThing(); }}
注意上面的addListener(listener);也就是把listener对象传进来,所以在EventSource类里面调用的listener.onMyEvent(event)的时候,实际上是调用刚刚传进的listener对象的方法。 如果还没有看懂,欢迎留言,我们一起讨论讨论! 转载地址:https://liangyihuai.blog.csdn.net/article/details/48900693 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月13日 08时19分16秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
CodeForces - 761C Dasha and Password (思维 暴力)
2019-04-30
POJ - 2481 Cows (树状数组 入门题)
2019-04-30
ACM-ICPC 2018 焦作赛区网络预赛 I. Save the Room
2019-04-30
CodeForces - 987C Three displays (暴力/dp)
2019-04-30
计蒜客 NAIPC 2016 F. Mountain Scenes(dp)
2019-04-30
牛客国庆集训派对Day4——I 连通块计数(思维)
2019-04-30
牛客国庆集训派对Day4——G 区间权值(找规律,双重前缀和)
2019-04-30
牛客国庆集训派对Day5——L 数论之神(找规律/数论)
2019-04-30
CodeForces - 629B Far Relative’s Problem(模拟)
2019-04-30
CodeForces - 1059B Forgery (思维)
2019-04-30
CodeForces - 456C Boredom (dp)
2019-04-30
CodeForces - 960B Minimize the error (思维,贪心)
2019-04-30
CodeForces - 97B Superset (思维/分治/构造)
2019-04-30
CodeForces - 675A Infinite Sequence(简单数论 细节)
2019-04-30
CodeForces - 1042B Vitamins (思维)
2019-04-30