`
raymond.chen
  • 浏览: 1418674 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java事件机制范例

    博客分类:
  • Java
 
阅读更多

java事件机制的参与者:

event object:事件对象,时间产生时具体的“事件”,一般作为listener的方法参数使用。

event source:事件源,接收事件的实体。

event listener:事件监听器类。当有对应的event object产生时,调用相应的方法进行处理。

 

事件对象:

/**
 * 事件对象类
 * 		继承EventObject类
 */
public class DoorEvent extends EventObject{
	private static final long serialVersionUID = 6734613668785304327L;
	
	private String state;
	
	public DoorEvent(Object source, String state) {
		super(source);
		this.state = state;
	}
	
	public String getState() {
		return state;
	}
	
	public void setState(String state) {
		this.state = state;
	}
}

 

事件监听器:

/**
 * 事件监听器接口类
 * 		继承EventListener接口
 */
public interface DoorEventListener extends EventListener{
	public void fireEvent(DoorEvent event);
}

 

/**
 * 开门事件监听器类
 */
public class DoorOpenEventListener implements DoorEventListener {
	@Override
	public void fireEvent(DoorEvent event) {
		if("open".equals(event.getState())){
			System.out.println("Door opened");
		}
	}
}

 

/**
 * 关门事件监听器类
 */
public class DoorCloseEventListener implements DoorEventListener {
	@Override
	public void fireEvent(DoorEvent event) {
		if("close".equals(event.getState())){
			System.out.println("Door closed!");
		}
	}
}

 

事件源:

/**
 * 事件源类
 */
public class DoorManager {
	private Set<DoorEventListener> listeners = new HashSet<DoorEventListener>();
	
	/**
	 * 注册事件
	 */
	public void addListener(DoorEventListener listener){
		listeners.add(listener);
	}
	
	/**
	 * 删除事件
	 */
	public void removeListener(DoorEventListener listener){
		listeners.remove(listener);
	}
	
	/**
	 * 通知所有注册的事件
	 * @param event 事件对象
	 */
	private void notifyListeners(DoorEvent event){
		Iterator<DoorEventListener> it = listeners.iterator();
        while (it.hasNext()) {
        	DoorEventListener listener = (DoorEventListener) it.next();
            listener.fireEvent(event);
        }
	}
	
	public void openDoor(){
		DoorEvent event = new DoorEvent(this, "open");
        notifyListeners(event);
	}
	
	public void closeDoor(){
		DoorEvent event = new DoorEvent(this, "close");
        notifyListeners(event);
	}
	
	public static void main(String[] args) {
		DoorManager dm = new DoorManager();
		dm.addListener(new DoorOpenEventListener());
		dm.addListener(new DoorCloseEventListener());
		
		dm.openDoor();
		dm.closeDoor();
	}
}

 

分享到:
评论

相关推荐

    Java范例大全 源码

    首先,全书以Java开发环境搭建开篇,循序渐进地介绍了Java语法的方方面面,不仅包括变量、语句、字符串、数组、类、集合、面向对象等必备的基础语法,而且还涵盖异常处理与反射机制、I/O文件操作、线程、数据库操作...

    JAVA 范例大全 光盘 资源

    JAVA 范例大全 光盘 资源 书籍目录: 前言. 第1章 开发环境搭建 1 实例1 下载、安装并配置JDK 1 实例2 第一个Java程序 3 实例3 在Eclipse中创建第一个Java程序 4 常见问题 javac不是内部或者外部命令 6 常见...

    java范例开发大全(pdf&源码)

    实例161 垃圾回收的机制 250 第9章 面向对象的四大特征(教学视频:65分钟) 252 9.1 抽象 252 实例162 求自定义几何图形的面积和周长 252 实例163 使用抽象方法实现的支票夹 254 9.2 封装 257 实例164 世界小姐参赛...

    java源码包---java 源码 大量 实例

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM...

    java范例开发大全

    实例161 垃圾回收的机制 250 第9章 面向对象的四大特征(教学视频:65分钟) 252 9.1 抽象 252 实例162 求自定义几何图形的面积和周长 252 实例163 使用抽象方法实现的支票夹 254 9.2 封装 257 实例164 世界小姐参赛...

    java范例开发大全源代码

     实例161 垃圾回收的机制 250  第9章 面向对象的四大特征(教学视频:65分钟) 252  9.1 抽象 252  实例162 求自定义几何图形的面积和周长 252  实例163 使用抽象方法实现的支票夹 254  9.2 封装 ...

    Java范例开发大全 (源程序)

     实例161 垃圾回收的机制 250  第9章 面向对象的四大特征(教学视频:65分钟) 252  9.1 抽象 252  实例162 求自定义几何图形的面积和周长 252  实例163 使用抽象方法实现的支票夹 254  9.2 封装 257  ...

    Java范例开发大全(全书源程序)

    Java范例开发大全(全书源程序),目录如下: 第1篇 Java编程基础 第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境...

    JAVA上百实例源码以及开源项目源代码

    Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来...

    java源码包4

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    JAVA上百实例源码以及开源项目

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java源码包3

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    Java开发详解.zip

    031504_【第15章:Java反射机制】_Java反射机制的深入研究笔记.pdf 031505_【第15章:Java反射机制】_动态代理笔记.pdf 031506_【第15章:Java反射机制】_工厂设计模式笔记.pdf 031601_【第16章:Annotation】_系统...

    java源码包2

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    Java开发技术大全(500个源代码).

    代码范例列表 第1章 示例描述:本章演示如何开始使用JDK进行程序的开发。 HelloWorldApp.java 第一个用Java开发的应用程序。 firstApplet.java 第一个用Java开发的Applet小程序。 firstApplet.htm 用来装载...

    JAVA 开发实战经典视频 + 课件 + 源码

    第1部分 Java基础程序设计 第1章 Java概述及开发环境搭建 2 视频讲解:35分钟 1.1 认识Java 2 1.1.1 什么是Java 2 1.1.2 Java语言的特点 3 1.1.3 Java程序的运行机制和Java虚拟机 5 1.2 Java开发环境搭建 6 1.2.1 ...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] 限定选择控件 [MonthMaker.java] 月份表算法类 [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接...

    java认证所有课程

    本模块讨论了事件驱动的图形用户界面(GUI)的用户输入机制。 第一节 相关问题 讨论 - 以下为与本模块内容有关的问题: - 哪些部分对于一个图形用户界面来说是必需的? - 一个图形化程序如何处理鼠标点击或者其他...

    Java编程宝典(十年典藏版).明日科技 李忠尉 陈丹丹 张振坤编著.源代码(完整版)

    主要包括java初体验、eclipse与netbeans、基本语法、控制流程语句、数组、类与对象、字符串、继承与多态、接口与抽象类、集合与异常处理、io流、tcp与udp技术、窗体程序开发、多线程技术、jdbc技术、gui事件处理机制...

    java网络编程_part2

    本书的范例都基于最新的JDK 1.5版本,书中内容包括:Java网络编 程的基础知识、套接字编程、非阻塞通信、创建HTTP服务器与客户程序、 数据报通信、对象的序列化与反序列化、Java反射机制、RMI框架、JDBC API、...

Global site tag (gtag.js) - Google Analytics