Java 中的事件监听机制
看项目代码时遇到了好多事件监听机制相关的代码。现学习一下:
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 中的事件监听机制的更多相关文章
- Java中的事件监听机制
鼠标事件监听机制的三个方面: 1.事件源对象: 事件源对象就是能够产生动作的对象.在Java语言中所有的容器组件和元素组件都是事件监听中的事件源对象.Java中根据事件的动作来区分不同的事件源对象,动 ...
- java Gui编程 事件监听机制
1. GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式: 1. 命令交互方式 图书管理系统 ...
- 简单剖析Node中的事件监听机制(一)
使用js的class类简单的实现一个事件监听机制,不同于浏览器中的时间绑定与监听,类似于node中的时间监听,并且会在接下来的文章中去根据自己的理解去写一下Event模块中的原理. Node.js使用 ...
- Java界面编程—事件监听机制
组件首先要先注册事件处理器,当用户单击组件.移动鼠标或者敲击键盘时都会产生事件(Event),一旦有时间发生,应用程序就会做出对该事件的响应,这些组件就是事件源(Event source). 接受.解 ...
- 请描述Java中的时间监听机制?
1.时间监听涉及到三个组件:事件源.事件对象.事件监听器 2.当事件源上发生某个动作时,它会调用事件监听器的一个方法,并将事件对象穿进去,开发人员在监听器中通过事件对象,拿到事件源,从而对事件源进行操 ...
- 转:java中的事件监听是怎样实现随时监听的
http://blog.csdn.net/qq369201191/article/details/51204006
- 4.JAVA之GUI编程事件监听机制
事件监听机制的特点: 1.事件源 2.事件 3.监听器 4.事件处理 事件源:就是awt包或者swing包中的那些图形用户界面组件.(如:按钮) 事件:每一个事件源都有自己特点有的对应事件和共性事件. ...
- JAVA事件监听机制学习
//事件监听机制 import java.awt.*; import java.awt.event.*; public class TestEvent { public static void mai ...
- Java swing(awt):事件监听机制的实现原理+简单示例
(1)实现原理 事件监听机制的实现: 参考图:事件模型_ActionEvent 为了节省资源,系统无法对某个事件进行实时的监听.故实现的机制是当发生某个事件后,处理代码将被自动运行,类似钩子一般.(回 ...
随机推荐
- omi-mp-create源码加注
omi-mp-create是dntzhang写的小程序框架,主要功能是实现全局状态自动更新和页面间通信,传送门. 代码虽然简单但是注释不多读起来还是需要一点时间理解,因此在上面加入了个人理解的注释方便 ...
- php>$_SERVER服务的一些常用命令
$_SERVER['REMOTE_ADDR'] //当前用户 IP . $_SERVER['REMOTE_HOST'] //当前用户主机名 $_SERVER['REQUEST_URI'] //UR ...
- linux VNC-server
[root@kvm-server Packages]# rpm -qpi tigervnc-server-1.8.0-1.el7.x86_64.rpm Name : tigervnc-server V ...
- [TJOI2011]树的序(贪心,笛卡尔树)
[TJOI2011]树的序 题目描述 众所周知,二叉查找树的形态和键值的插入顺序密切相关.准确的讲:1.空树中加入一个键值k,则变为只有一个结点的二叉查找树,此结点的键值即为k:2.在非空树中插入一个 ...
- (转)RestFul 无状态的一点认识
今天早上在Yahoo的邮件列表里看到一篇颇有意思的讨论,标题为RESTful vs. unRESTful: Session IDs and Authentication(51CTO编者注:意为REST ...
- C/C++中相对路径与绝对路径以及斜杠与反斜杠的区别
1 绝对路径与相对路径 绝对路径表示相对容易得多,依次将文件所在盘符文件夹逐级展开就是绝对路径: ofstream infile("E:\\MyDoc\\file.txt", io ...
- nested exception is java.lang.NoClassDefFoundError: org/codehaus/jettison/json/JSONObject异常的解决办法
解决办法:你可以尝试添加一个jar包,因为我加入了一个jar包后错误问题成功解决. 将所需要的jettison-1.2.jar包复制到lib文件夹里面,重启项目,问题搞定.
- hdu 2102 A计划 具体题解 (BFS+优先队列)
题目链接:pid=2102">http://acm.hdu.edu.cn/showproblem.php?pid=2102 这道题属于BFS+优先队列 開始看到四分之中的一个的AC率感 ...
- hadoop-04-mysql安装
hadoop-04-mysql安装 su root 1,rpm -qa|grep mysql 2, rpm -e --nodeps `rpm -qa|grep mysql` 3,rpm -ivh co ...
- UVALive 6084 Happy Camper(数学题)
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...