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

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. Dapper Dapper-Extensions

    之前公司在开发项目的时候有用到过Dapper 仓储 以及IOC Castel .最近新项目上想使用上这些技术,决定新学习一下. 看了很多资料,发现几个比较容易菜鸟的我理解的,整理下来,找时间好好整理一 ...

  2. java 通过cookie判断是否登陆

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOEx ...

  3. 关于Vue中父子组件相互传值

    Header为子组件,Home为父组件,通过子组件调用父组件 运行结果如下 下面是父组件调用子组件的案例 通过button按钮的click事件 图一是父组件Home中的run方法,图二是msg和fun ...

  4. mac同时享受教育优惠和免手续费分期

    神奇地址:工商银行  http://store.apple.com/cn_icbc_edu招商银行  http://store.apple.com/cn_cmb_edu农业银行  http://sto ...

  5. MySQL 数据还原

    1.1还原使用mysqldump命令备份的数据库的语法如下: mysql -u root -p [dbname] < backup.sq 示例: mysql -u root -p < C: ...

  6. shuoj1936-D序列—最长上升子序列

    Description 已知两个长度为N的数组A和B.下标从0标号至N-1. 如今定义一种D序列 (如果长度为L).这样的序列满足下列条件: 1. 0 <= D[i] <= N-1 2.  ...

  7. js模拟支付宝提交表单

    弄过支付宝的程序猿可能都知道,里面有非常多地方都用到了自提交表单的方式,支付宝的接口通过请求API的形式取得server返回的表单字符串,使用out.print("表单字符串")在 ...

  8. mfc 链接 access 2007 数据库

    神马也不说了,直接给出源代码和project 原理这个东西 Google  下.都出来了.自己就说下作为新手 , 1 应该打印出,链接错误原因 2 应该将数据库放到project以下,特别注意这点 给 ...

  9. 图像手工画效果【QT+OpenCV】

    效果例如以下 [木雕]

  10. [PHP]怎样在SAE的CodeIgniter项目中隐藏掉index.php

    第一步:改动项目根文件夹的config.yaml文件.加入例如以下内容: handle: - rewrite: if(!is_dir() && !is_file() && ...