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

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. 异步线程编程,线程池,线程组,后面涉及ThreadLocal在理解

    join模拟订单 package com.future.demo.future; /** * * * @author Administrator * */ public class NormalThr ...

  2. Git日常操作指令

    1. 将本地项目上传到码云: ①. 码云上创建一个项目 ②. 本地文件项目内右键git bash进入git控制台 ③. git init 命令   -- 会在本地创建一个.git文件夹 ④. git ...

  3. MySQL中将数据库表名修改成大写的存储过程

    原文:MySQL中将数据库表名修改成大写的存储过程 MySQL中将数据库表名修改成大写的存储过程 创建存储过程的代码: DROP PROCEDURE IF EXISTS uppercaseTablen ...

  4. JVM分代通俗解释

    JVM分代通俗解释 学习了:https://www.cnblogs.com/zgghb/p/6428395.html

  5. Fragmen直接来回切换deno

    思路: 第一步.建立一个activity.用来管理fragment. 第二步'获取fragmentManger 和fragmentTraction. private FragmentManager f ...

  6. 2.跟我学solr---在solr admin中加入索引

    这一章为大家介绍怎样在solr admin中.通过浏览器向solr加入索引 一.加入xml格式的文档 进入solr admin后,点击Documents.选择Documentation Type为xm ...

  7. 怎么样才算是精通 C++?

    C++是一门非常奇妙的语言.让人又爱又恨. 在知乎上看到的一个帖子.怎么样才算是精通C++,这里节选一些精彩的回复. 链接:http://www.zhihu.com/question/20201972 ...

  8. 1、初始JAVA

    一.    语言的翻译分两种: 编译型语言:例如c语言.c++语言  优点:速度快  缺点:不能跨平台                编译器编译——>特定平台的目标文件obj——>特定平台 ...

  9. 大海教你学手游2015CocosLua第一季_00课程介绍

    话说大盘从5100直掉到3500点,千仅仅股票跌幅超过20%,跌跌不休.散户.证监会.做空机构開始斗气地主来了: 散户:叫地主 空头:抢地主,3分 证监会:pass 空头:压死 证监会:不要 散户:不 ...

  10. php如何实现简繁体互转

    php如何实现简繁体互转 一.总结 一句话总结:大部分字是一样的,只转不同的即可 具体转换就是在映射表中找对应的即可 1.简繁体转换的常见问题是什么? 能否智能转换,就是词组, 例如:简体“ 皇后 ” ...