看项目代码时遇到了好多事件监听机制相关的代码。现学习一下:

java事件机制包含三个部分:事件、事件监听器、事件源。

1.事件:继承自java.util.EventObject类,开发人员自己定义。

package com.shuyan.javatest.EventTest;

import java.util.EventObject;

public class DnsEvent extends EventObject {

    private String userData;

    private long parseTime;

    public DnsEvent(Object source) {
super(source);
} public DnsEvent(Object source, String userData, long parseTime) {
super(source);
this.userData = userData;
this.parseTime = parseTime;
} public String getUserData() {
return userData;
} public void setUserData(String userData) {
this.userData = userData;
} public long getParseTime() {
return parseTime;
} public void setParseTime(long parseTime) {
this.parseTime = parseTime;
} }

2.事件监听器:实现java.util.EventListener接口,注冊在事件源上,当事件源的属性或状态改变时,取得对应的监听器调用其内部的回调方法。

package com.shuyan.javatest.EventTest;

import java.util.EventListener;

public interface DnsEventListener extends EventListener {

    public void processDnsEvent(DnsEvent dnsEvent);

}

监听器的详细实现类

public class DnsEventaListenerImpl implements DnsEventListener {

    @Override
public void processDnsEvent(DnsEvent dnsEvent) { String userdata = dnsEvent.getUserData();
System.out.println("userdata-->" + userdata); }
}

3.事件源:事件发生的地方,因为事件源的某项属性或状态发生了改变导致某项事件发生。因为事件监听器要注冊在事件源上,所以事件源类中应该要有盛装监听器的容器(List,Set等)。

public class ManagerListener {

    private List<DnsEventListener> listeners = null;

    private static class Singleton {
static ManagerListener managerListener = new ManagerListener();
} public static ManagerListener getInstance() {
return Singleton.managerListener;
} private ManagerListener() {
listeners = new ArrayList<>();
} public void addDnsEventListener(DnsEventListener listener) {
this.listeners.add(listener);
} public void removeDnsEventListener(DnsEventListener listener) {
this.listeners.remove(listener);
} public void fireDnsEventListener(DnsEvent event) {
for (DnsEventListener listener : listeners) {
listener.processDnsEvent(event);
}
} }

測试例如以下:

public class DnsEventTest {
public static void main(String[] args) {
ManagerListener managerListener = ManagerListener.getInstance();
DnsEvent dnsEvent = new DnsEvent(managerListener, "data", 1000L);
DnsEventaListenerImpl listener = new DnsEventaListenerImpl(); managerListener.addDnsEventListener(listener);
managerListener.fireDnsEventListener(dnsEvent);
}
}

參考:http://blog.csdn.net/longlong3050/article/details/6854456

Java 中的事件监听机制的更多相关文章

  1. Java中的事件监听机制

    鼠标事件监听机制的三个方面: 1.事件源对象: 事件源对象就是能够产生动作的对象.在Java语言中所有的容器组件和元素组件都是事件监听中的事件源对象.Java中根据事件的动作来区分不同的事件源对象,动 ...

  2. java Gui编程 事件监听机制

    1.     GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式:   1. 命令交互方式    图书管理系统 ...

  3. 简单剖析Node中的事件监听机制(一)

    使用js的class类简单的实现一个事件监听机制,不同于浏览器中的时间绑定与监听,类似于node中的时间监听,并且会在接下来的文章中去根据自己的理解去写一下Event模块中的原理. Node.js使用 ...

  4. Java界面编程—事件监听机制

    组件首先要先注册事件处理器,当用户单击组件.移动鼠标或者敲击键盘时都会产生事件(Event),一旦有时间发生,应用程序就会做出对该事件的响应,这些组件就是事件源(Event source). 接受.解 ...

  5. 请描述Java中的时间监听机制?

    1.时间监听涉及到三个组件:事件源.事件对象.事件监听器 2.当事件源上发生某个动作时,它会调用事件监听器的一个方法,并将事件对象穿进去,开发人员在监听器中通过事件对象,拿到事件源,从而对事件源进行操 ...

  6. 转:java中的事件监听是怎样实现随时监听的

    http://blog.csdn.net/qq369201191/article/details/51204006

  7. 4.JAVA之GUI编程事件监听机制

    事件监听机制的特点: 1.事件源 2.事件 3.监听器 4.事件处理 事件源:就是awt包或者swing包中的那些图形用户界面组件.(如:按钮) 事件:每一个事件源都有自己特点有的对应事件和共性事件. ...

  8. JAVA事件监听机制学习

    //事件监听机制 import java.awt.*; import java.awt.event.*; public class TestEvent { public static void mai ...

  9. Java swing(awt):事件监听机制的实现原理+简单示例

    (1)实现原理 事件监听机制的实现: 参考图:事件模型_ActionEvent 为了节省资源,系统无法对某个事件进行实时的监听.故实现的机制是当发生某个事件后,处理代码将被自动运行,类似钩子一般.(回 ...

随机推荐

  1. MariaDB GALERA 集群双节点部署

    节点1:10.2.2.41 节点2:10.2.2.42 软件: mariadb-galera-10.0.22-linux-x86_64.tar.gz #galera相关参数:(两个节点配置文件类似) ...

  2. /etc/rc.d/rc.sysinit

    [root@web02 ~]# ls /etc/rc.d/rc.sysinit /etc/rc.d/rc.sysinit [root@web02 ~]# [root@web02 ~]# ls /etc ...

  3. Object-C,对象和方法

    学习Object-C,买了2本书,其中1本是用C币买的,总体质量一般,比较基础. 另外一本是,疯狂-李阳写的,大部头,比较吓人,比较全一点. 对于面向对象,之前还是有个大概的理解,再多点基础的例子. ...

  4. 【BZOJ 1150】[CTSC2007]数据备份Backup

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 选择的连接肯定是相邻的点对. 那么我们处理出来长度为n-1的数组a 其中a[i-1] = dis[i]-dis[i-1] 那么问题就 ...

  5. Qt之图形(简笔画-绘制漂亮的西瓜)

    简述 Summer is coming-我们呢,为大家准备了丰盛的佳果-西瓜,清爽解渴,甘味多汁. 一笔一划学简笔画,分分钟让你掌握一门新技能,下面我们来绘制一个"盛夏之王"-西瓜 ...

  6. iOS设计模式之NSNotificationCenter 消息中心

    消息中心模式和KVO模式有点相似,差别在于.KVO  模式是意图在于监听摸一个相应的值的变化.而去出发一个方法相应的动作.而消息中心在于,广播.它就像一个广播基站,发送一条消息,在全部的加入监听的地方 ...

  7. YII显示sql进行调试

    进行插入測试: 一个简单控制器: function actionJia(){ $goods_model = new Goods(); //进行加入有别于查询不能使用以下这样的方式 // $goods_ ...

  8. light oj 1317

    Description You probably have played the game "Throwing Balls into the Basket". It is a si ...

  9. nodejs是什么

    nodejs是什么 一种javascript的运行环境,能够使得javascript脱离浏览器运行. 阅读本帖需要先复习小学语文课文,华罗庚的<统筹方法>. 比如,想泡壶茶喝.当时的情况是 ...

  10. Lists are mutable

    The syntax for accessing the elements of a list is the same as for accessing the characters of a str ...