文档章节

监听器,事件对象,事件源

o
 osc_g8254g7s
发布于 2019/08/20 00:35
字数 734
阅读 5
收藏 0

精选30+云产品,助力企业轻松上云!>>>

监听实例中的方法是在事件发生后才会执行的。并不是在事件是执行。如果想对事件发生时的代码修改,需要在类中找到产生事件的方法。

在java中时常会有使用到监听的场景,我觉得这其实就是对接口(interface)的活用。

事件源:就是产生事件的对象(是实例),就是要被监听的对象;

监听器: 就是一个接口;

事件对象:就是一个javabean,用来封装事件的信息,比如:产生事件的对象,对事件的描述之类的。不是必须的。

在事件源中,当事件源中的监听事件发生时(即创建了事件对象),就要调用被传入的监听器实例(自己实现)的方法。这就是回调。

在事件源对应的类中要设置添加被实现的监听器实例。

下面是个简单的demo:

import java.util.EventListener;
import java.util.EventObject;
import java.util.Iterator;
import java.util.Vector;
//事件源
public class Test {
 private TestListener testListener;//这样只能存放一个监听器实例,用Vetoc
 private Vector<Object> vector=new Vector<Object>();//同步访问
 private final int TestListener=1;
 //添加监听器
 public void addTestListener(TestListener l) {
     vector.add(l);
 }
 //去除监听器
 public void removeTestListener(TestListener t) {
     vector.remove(t);
 }
 //产生事件的方法
 public void createTestEvent() {
     /*
      * do something
      * */
     TestEvent testEvent=new TestEvent(this,1);
     notifyListener(testEvent,TestListener);
    
 }
 //每个会产生事件对象的方法都要调用
 public void notifyListener(TestEvent t,int listenerState) {
     //在vector数组中寻找对应的监听器实例,并将事件传递给它
     Iterator<Object> it=vector.iterator();
     while(it.hasNext()) {
         Object object=it.next();
        switch(listenerState) {
        case TestListener:
            if(object instanceof TestListener) {
            ((TestListener) object).handle(t);
             };
        default:;
        }
        
     }
 }
 //其他产生事件的方法

}

//监听器

 public interface TestListener extends EventListener{
     public void handle(TestEvent e);
 }   

//事件对象

 class  TestEvent extends EventObject{
     private int state;//可以用来标记不同的的事件,如点击事件,鼠标事件,窗口事件等根据这来调用不同监听器的方法
     public TestEvent(Object source,int state) {
         super(source);
         this.state=state;
         }
     public void setSource(Object source) {
         super.source=source;
     }
     public Object getSource() {
         return super.source;
     }
     public void setState(int state) {this.state=state;}
     public int getState() {return this.state;}
 }

 从上面可以看出,事件对象只是一个用来封装事件源信息的javabean,如果你的监听器方法不会用到事件源对象的信息,那么你就可以不传递事件对象,那么就不用编写事件对象类了。事件源既产生事件,也执行事件处理方法,监视器是其暴露出来让我们编写的事件处理方法而已。

应用场景:创建事件源实例后,调用实例中会产生事件的方法,来激活已经添加的监听器实例,从而按照监听器方法处理。

比如在一个线程中接收数据,当接收到特定字节时就会调用事件源的方法来产生事件对象,从而激活监听器实例中的方法。

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
监听器入门看这篇就够了

什么是监听器 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。。 为什么我...

阿斯顿方法
2018/02/09
0
0
Java事件监听器的四种实现方式

自身类作为事件监听器 外部类作为事件监听器 匿名内部类作为事件监听器 内部类作为事件监听器 自身类作为事件监听器: 1 import javax.swing.; 2 import java.awt.; 3 import java.awt.event....

osc_2w12i9vq
2018/02/03
5
0
java中的回调,监听器,观察者

回调: 函数回调接口: public interface ICallBack { } 回调者以及测试 public class Caller { // callBack.callBack(); callBack.defaultCallBack(); } 根据调用callBack还是defaultCallBa......

osc_rcsk5srk
2019/05/11
2
0
监听器入门看这篇就够了

什么是监听器 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。。 为什么我...

osc_wyhsf4ea
2018/02/09
2
0
Java事件监听的四种实现方式

1.事件对象: 一般继承自java.util.EventObject对象,由开发者自行定义. 2.事件源: 就是触发事件的源头,不同的事件源会触发不同的事件类型. 3.事件监听器: 事件监听器负责监听事件源发出的事...

osc_rwkqsflm
2018/04/30
8
0

没有更多内容

加载失败,请刷新页面

加载更多

macz技巧分享—macOS高端使用技巧

Macos 的占有量不如 Windows,两者之间当操作方式也有很大的不同,当很多人熱悉 Windows 的操作之后,再接触 macos,觉得难上手,其实是习惯问题。如果你学习一些技巧,会觉得 macos 其实也不...

mac小叮当
39分钟前
11
0
手把手教你如何用黑白显示器显示彩色!

来源:大数据文摘 本文约1000字,建议阅读6分钟。 本文为你介绍如何通过黑白显示器上也能显示出彩色。 原来在黑白显示器上也能显示出彩色啊!通过在监视器上覆盖拜耳滤色镜,并拼接彩色图像,...

osc_jklrr90y
40分钟前
18
0
key-value结构排序:给定一个字符串,统计每个字符出现频率,先按value降序,再按key升序

对于key-value结构的排序 第一种:lambda表达式 第二种:函数 第三种:类对()的重载,仿函数形式 #include <iostream>#include <vector>#include <unordered_map>#include <string>#in......

osc_gwtkg2dc
41分钟前
0
0
BlockChain:2020年7月10日世界人工智能大会WAIC《链智未来 赋能产业区块链主题论坛——2020全球区块链创新50强》

BlockChain:2020年7月10日世界人工智能大会WAIC《链智未来 赋能产业区块链主题论坛——2020全球区块链创新50强》 目录 世界人工智能大会WAIC《链智未来 赋能产业区块链主题论坛——2020全球...

osc_vew1u0h0
42分钟前
0
0
BlockChain:2020年7月10日世界人工智能大会WAIC《链智未来 赋能产业区块链主题论坛》(三)

BlockChain:2020年7月10日世界人工智能大会WAIC《链智未来 赋能产业区块链主题论坛》(三) 目录 2020年7月10日世界人工智能大会WAIC《链智未来 赋能产业区块链主题论坛》 演讲嘉宾 演讲内容 ...

osc_8o71811p
43分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部