关于JAVA中事件分发和监听机制实现的代码实例-绝对原创实用

http://blog.csdn.net/5iasp/article/details/37054171

文章标题:关于JAVA中事件分发和监听机制实现的代码实例

文章地址: http://blog.csdn.net/5iasp/article/details/37054171

作者: javaboy2012
Email:[email protected]
qq:    1046011462

一、场景假设

假设有博客系统中需要实现如下功能:

系统中用户发布文章,修改文章,删除文章时,需要一些相关的操作需要执行。

发布文章后,给好友发送邮件通知,给用户加积分,对文章做全文索引。
修改文章后,给好友发送邮件修改通知,给用户加积分,对文章重新做全文索引。
删除文章后,给好友发送邮件修改通知,给用户减少积分,对文章重新做全文索引。

二、相关的概念解析

分析如上场景,可以采用事件分发和监听机制来实现。

事件分发和监听有如下几个概念:

事件源:触发事件的对象 如上场景中我们把实体对象作为事件源,发布的文章就是事件源

事件: 对事件源的操作产生事件,例如 发表文章 修改文章,删除文章这些操作就会触发相关的 文章被发表事件,文章被删除事件,文章被修改事件

事件监听器:对事件源各种事件触发执行行为的抽象,包括接口和若干实现类。

比如: 接口需要定义事件源相关事件触发时需要实现的操作接口。

事件分发器:事件分发器主要处理事件的分发和事件监听器的管理,注册和删除事件监听器等。

三、 代码示例

项目结构:

根据上述概念相关代码如下:

包括如下代码

1. 博客文章类  属于事件源

[java] view plaincopyprint?

  1. package com.yanek.event;
  2. /**
  3. * 博客文章
  4. * @author Administrator
  5. *
  6. */
  7. public class Entry {
  8. public long getId() {
  9. return id;
  10. }
  11. public void setId(long id) {
  12. this.id = id;
  13. }
  14. public String getName() {
  15. return name;
  16. }
  17. public void setName(String name) {
  18. this.name = name;
  19. }
  20. private long id; // 编号
  21. private String name; //标题
  22. }
package com.yanek.event;
/**
 * 博客文章
 * @author Administrator
 *
 */
public class Entry {

	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	private long id; // 编号
	private String name; //标题

}

2. 博客文章事件类 属于事件对象

其中定义了事件的类型和事件源,事件参数

[java] view plaincopyprint?

  1. package com.yanek.event;
  2. import java.util.Collections;
  3. import java.util.Date;
  4. import java.util.Map;
  5. /**
  6. * 博客文章事件
  7. * @author Administrator
  8. *
  9. */
  10. public class EntryEvent
  11. {
  12. public static final int ENTRY_ADDED = 100; //事件类型:博客文章被创建
  13. public static final int ENTRY_DELETED = 101;//事件类型:博客文章被删除
  14. public static final int ENTRY_MODIFIED = 102;//事件类型:博客文章被修改
  15. private int eventType; //事件类型
  16. private Entry entry; //博客文章对象
  17. private Date date; //事件触发日期
  18. private Map params; //事件辅助参数
  19. public EntryEvent(int eventType, Entry entry, Map params) {
  20. this.eventType = eventType;
  21. this.entry = entry;
  22. this.params = params != null ? Collections.unmodifiableMap(params)
  23. : null;
  24. date = new Date();
  25. }
  26. public int getEventType() {
  27. return eventType;
  28. }
  29. public Entry getEntry() {
  30. return entry;
  31. }
  32. public Map getParams() {
  33. return params;
  34. }
  35. public Date getDate() {
  36. return date;
  37. }
  38. }
package com.yanek.event;

import java.util.Collections;
import java.util.Date;
import java.util.Map;
/**
 * 博客文章事件
 * @author Administrator
 *
 */
public class EntryEvent

{

	public static final int ENTRY_ADDED = 100; //事件类型:博客文章被创建
	public static final int ENTRY_DELETED = 101;//事件类型:博客文章被删除
	public static final int ENTRY_MODIFIED = 102;//事件类型:博客文章被修改

	private int eventType; //事件类型
	private Entry entry; //博客文章对象
	private Date date; //事件触发日期
	private Map params; //事件辅助参数

	public EntryEvent(int eventType, Entry entry, Map params) {
		this.eventType = eventType;
		this.entry = entry;
		this.params = params != null ? Collections.unmodifiableMap(params)
				: null;
		date = new Date();
	}

	public int getEventType() {
		return eventType;
	}

	public Entry getEntry() {
		return entry;
	}

	public Map getParams() {
		return params;
	}

	public Date getDate() {
		return date;
	}
}

3. 事件监听器接口和实现类:

定义各种事件发生时需要处理的接口方法

[java] view plaincopyprint?

  1. package com.yanek.event;
  2. /**
  3. * 博客文章监听器接口
  4. * @author Administrator
  5. *
  6. */
  7. public interface EntryListener
  8. {
  9. /**
  10. * 博客文章被创建
  11. * @param entryevent
  12. */
  13. public abstract void entryAdded(EntryEvent entryevent);
  14. /**
  15. * 博客文章被删除
  16. * @param entryevent
  17. */
  18. public abstract void entryDeleted(EntryEvent entryevent);
  19. /**
  20. * 博客文章被修改
  21. * @param entryevent
  22. */
  23. public abstract void entryModified(EntryEvent entryevent);
  24. }
package com.yanek.event;
/**
 * 博客文章监听器接口
 * @author Administrator
 *
 */
public interface EntryListener
{
    /**
     * 博客文章被创建
     * @param entryevent
     */
    public abstract void entryAdded(EntryEvent entryevent); 

    /**
     * 博客文章被删除
     * @param entryevent
     */

    public abstract void entryDeleted(EntryEvent entryevent);

    /**
     * 博客文章被修改
     * @param entryevent
     */
    public abstract void entryModified(EntryEvent entryevent);

}

事件监听器接口的实现类:

实现场景中的三类操作,监听器接口实现包括如下三个类实现

IndexManager 索引管理器类
  ScoreManager 积分管理器类
  EmailManager 邮件管理器类

三个类都实现监听器接口EntryListener。具体代码如下:

[java] view plaincopyprint?

  1. package com.yanek.event;
  2. /**
  3. * 邮件管理器
  4. * @author Administrator
  5. *
  6. */
  7. public class EmailManager implements EntryListener{
  8. @Override
  9. public void entryAdded(EntryEvent entryevent) {
  10. System.out.println("EmailManager 处理 博客文章被创建事件。");
  11. }
  12. @Override
  13. public void entryDeleted(EntryEvent entryevent) {
  14. System.out.println("EmailManager 处理 博客文章被删除事件。");
  15. }
  16. @Override
  17. public void entryModified(EntryEvent entryevent) {
  18. System.out.println("EmailManager 处理 博客文章被修改事件。");
  19. }
  20. }
  21. package com.yanek.event;
  22. /**
  23. * 索引管理器
  24. * @author Administrator
  25. *
  26. */
  27. public class IndexManager implements EntryListener {
  28. @Override
  29. public void entryAdded(EntryEvent entryevent) {
  30. System.out.println("IndexManager 处理 博客文章被创建事件。");
  31. }
  32. @Override
  33. public void entryDeleted(EntryEvent entryevent) {
  34. // TODO Auto-generated method stub
  35. System.out.println("IndexManager 处理 博客文章被删除事件。");
  36. }
  37. @Override
  38. public void entryModified(EntryEvent entryevent) {
  39. // TODO Auto-generated method stub
  40. System.out.println("IndexManager 处理 博客文章被修改事件。");
  41. }
  42. }
  43. package com.yanek.event;
  44. /**
  45. * 积分管理器
  46. * @author Administrator
  47. *
  48. */
  49. public class ScoreManager implements EntryListener {
  50. @Override
  51. public void entryAdded(EntryEvent entryevent) {
  52. System.out.println("ScoreManager 处理 博客文章被创建事件。");
  53. }
  54. @Override
  55. public void entryDeleted(EntryEvent entryevent) {
  56. // TODO Auto-generated method stub
  57. System.out.println("ScoreManager 处理 博客文章被删除事件。");
  58. }
  59. @Override
  60. public void entryModified(EntryEvent entryevent) {
  61. // TODO Auto-generated method stub
  62. System.out.println("ScoreManager 处理 博客文章被修改事件。");
  63. }
  64. }
 package com.yanek.event;

/**
 * 邮件管理器
 * @author Administrator
 *
 */
public class EmailManager implements EntryListener{

	@Override
	public void entryAdded(EntryEvent entryevent) {

		System.out.println("EmailManager 处理 博客文章被创建事件。");

	}

	@Override
	public void entryDeleted(EntryEvent entryevent) {

		System.out.println("EmailManager 处理 博客文章被删除事件。");
	}
	@Override
	public void entryModified(EntryEvent entryevent) {

		System.out.println("EmailManager 处理 博客文章被修改事件。");

	}

}

package com.yanek.event;
/**
 * 索引管理器
 * @author Administrator
 *
 */
public class IndexManager implements EntryListener {

	@Override
	public void entryAdded(EntryEvent entryevent) {

		System.out.println("IndexManager 处理 博客文章被创建事件。");

	}

	@Override
	public void entryDeleted(EntryEvent entryevent) {
		// TODO Auto-generated method stub
		System.out.println("IndexManager 处理 博客文章被删除事件。");

	}

	@Override
	public void entryModified(EntryEvent entryevent) {
		// TODO Auto-generated method stub
		System.out.println("IndexManager 处理 博客文章被修改事件。");
	}

}

package com.yanek.event;
/**
 * 积分管理器
 * @author Administrator
 *
 */
public class ScoreManager implements EntryListener {

	@Override
	public void entryAdded(EntryEvent entryevent) {
		System.out.println("ScoreManager 处理 博客文章被创建事件。");

	}

	@Override
	public void entryDeleted(EntryEvent entryevent) {
		// TODO Auto-generated method stub
		System.out.println("ScoreManager 处理 博客文章被删除事件。");
	}

	@Override
	public void entryModified(EntryEvent entryevent) {
		// TODO Auto-generated method stub

		System.out.println("ScoreManager 处理 博客文章被修改事件。");

	}

}

4. 博客文章事件分发器类

[java] view plaincopyprint?

  1. package com.yanek.event;
  2. import java.util.ArrayList;
  3. /**
  4. * 博客文章事件分发器
  5. * @author Administrator
  6. *
  7. */
  8. public class EntryEventDispatcher {
  9. private static EntryEventDispatcher instance = new EntryEventDispatcher();
  10. private ArrayList listeners=new ArrayList();
  11. public static EntryEventDispatcher getInstance() {
  12. return instance;
  13. }
  14. private EntryEventDispatcher() {
  15. String[] observers = PropertyMgr.getProperty("observers").split(",");
  16. for(String s : observers) {
  17. System.out.println(s);
  18. try {
  19. this.addListener((EntryListener)(Class.forName(s).newInstance()));
  20. } catch (InstantiationException e) {
  21. e.printStackTrace();
  22. } catch (IllegalAccessException e) {
  23. e.printStackTrace();
  24. } catch (ClassNotFoundException e) {
  25. e.printStackTrace();
  26. }
  27. }
  28. }
  29. public synchronized void addListener(EntryListener listener) {
  30. System.out.println(":"+listener);
  31. if (listener == null) {
  32. System.out.println(":"+listener);
  33. throw new NullPointerException();
  34. } else {
  35. listeners.add(listener);
  36. return;
  37. }
  38. }
  39. public synchronized void removeListener(EntryListener listener) {
  40. listeners.remove(listener);
  41. }
  42. public void dispatchEvent(EntryEvent event) {
  43. // System.out.println("msgDispatchEvent");
  44. int eventType = event.getEventType();
  45. long t1=System.currentTimeMillis();
  46. System.out.println("kaishi="+t1);
  47. for (int i = 0; i < listeners.size(); i++) {
  48. try {
  49. EntryListener listener = (EntryListener) listeners.get(i);
  50. String name = listener.getClass().getName();
  51. name = name.substring(name.lastIndexOf(‘.‘) + 1);
  52. switch (eventType) {
  53. case EntryEvent.ENTRY_ADDED: // 创建博客文章
  54. listener.entryAdded(event);
  55. break;
  56. case EntryEvent.ENTRY_DELETED: // 删除博客文章
  57. listener.entryDeleted(event);
  58. break;
  59. case EntryEvent.ENTRY_MODIFIED: //修改 博客文章
  60. listener.entryModified(event);
  61. break;
  62. }
  63. } catch (Exception e) {
  64. // logger.error(e);
  65. }
  66. }
  67. System.out.println("cost time="+(System.currentTimeMillis()-t1));
  68. // Profiler.end("msgDispatchEvent");
  69. }
  70. }
package com.yanek.event;

import java.util.ArrayList;
/**
 * 博客文章事件分发器
 * @author Administrator
 *
 */
public class EntryEventDispatcher {

	private static EntryEventDispatcher instance = new EntryEventDispatcher();
	private ArrayList listeners=new ArrayList();

	public static EntryEventDispatcher getInstance() {
		return instance;
	}

	private EntryEventDispatcher() {

		String[] observers = PropertyMgr.getProperty("observers").split(",");
		for(String s : observers) {

			System.out.println(s);
			try {
				this.addListener((EntryListener)(Class.forName(s).newInstance()));
			} catch (InstantiationException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}
		}

	}

	public synchronized void addListener(EntryListener listener) {
		System.out.println(":"+listener);
		if (listener == null) {
			System.out.println(":"+listener);
			throw new NullPointerException();
		} else {
			listeners.add(listener);
			return;
		}
	}

	public synchronized void removeListener(EntryListener listener) {
		listeners.remove(listener);
	}

	public void dispatchEvent(EntryEvent event) {
		// System.out.println("msgDispatchEvent");
		int eventType = event.getEventType();
		long t1=System.currentTimeMillis();
		System.out.println("kaishi="+t1);
		for (int i = 0; i < listeners.size(); i++) {
			try {
				EntryListener listener = (EntryListener) listeners.get(i);
				String name = listener.getClass().getName();
				name = name.substring(name.lastIndexOf(‘.‘) + 1);

				switch (eventType) {
				case EntryEvent.ENTRY_ADDED: // 创建博客文章
					listener.entryAdded(event);
					break;

				case EntryEvent.ENTRY_DELETED: // 删除博客文章
					listener.entryDeleted(event);
					break;

				case EntryEvent.ENTRY_MODIFIED: //修改 博客文章
					listener.entryModified(event);
					break;

				}

			} catch (Exception e) {
				// logger.error(e);
			}

		}

		System.out.println("cost time="+(System.currentTimeMillis()-t1));

		// Profiler.end("msgDispatchEvent");
	}
}

5. 博客文章管理器类

[java] view plaincopyprint?

  1. package com.yanek.event;
  2. /**
  3. * 博客文章管理器
  4. * @author Administrator
  5. *
  6. */
  7. public class EntryManager {
  8. /**
  9. * @param args
  10. */
  11. public static void main(String[] args) {
  12. EntryManager eventManager=new EntryManager();
  13. Entry entry=new Entry();
  14. entry.setId(1);
  15. entry.setName("test");
  16. eventManager.addEntry(entry);  //创建
  17. eventManager.modifyEntry(entry); //修改
  18. eventManager.deleteEntry(entry); //删除
  19. }
  20. public void addEntry(Entry entry) {
  21. System.out.println("add entry ...id="+entry.getId());
  22. // 事件分发
  23. EntryEvent event = new EntryEvent(EntryEvent.ENTRY_ADDED, entry, null);
  24. EntryEventDispatcher.getInstance().dispatchEvent(event);
  25. }
  26. public void deleteEntry(Entry entry) {
  27. System.out.println("delete entry ...id="+entry.getId());
  28. // 事件分发
  29. EntryEvent event = new EntryEvent(EntryEvent.ENTRY_DELETED, entry, null);
  30. EntryEventDispatcher.getInstance().dispatchEvent(event);
  31. }
  32. public void modifyEntry(Entry entry) {
  33. System.out.println("modify entry ...id="+entry.getId());
  34. // 事件分发
  35. EntryEvent event = new EntryEvent(EntryEvent.ENTRY_MODIFIED, entry, null);
  36. EntryEventDispatcher.getInstance().dispatchEvent(event);
  37. }
  38. }
package com.yanek.event;

/**
 * 博客文章管理器
 * @author Administrator
 *
 */

public class EntryManager {

 /**
  * @param args
  */
 public static void main(String[] args) {

  EntryManager eventManager=new EntryManager();
  Entry entry=new Entry();
  entry.setId(1);
  entry.setName("test");

  eventManager.addEntry(entry);  //创建

  eventManager.modifyEntry(entry); //修改

  eventManager.deleteEntry(entry); //删除
 }

 public void addEntry(Entry entry) {
  System.out.println("add entry ...id="+entry.getId());

  // 事件分发
  EntryEvent event = new EntryEvent(EntryEvent.ENTRY_ADDED, entry, null);
  EntryEventDispatcher.getInstance().dispatchEvent(event);

 }

 public void deleteEntry(Entry entry) {
  System.out.println("delete entry ...id="+entry.getId());

  // 事件分发
  EntryEvent event = new EntryEvent(EntryEvent.ENTRY_DELETED, entry, null);
  EntryEventDispatcher.getInstance().dispatchEvent(event);

 }

 public void modifyEntry(Entry entry) {
  System.out.println("modify entry ...id="+entry.getId());
  // 事件分发
  EntryEvent event = new EntryEvent(EntryEvent.ENTRY_MODIFIED, entry, null);
  EntryEventDispatcher.getInstance().dispatchEvent(event);

 }

}

6. 辅助工具类:

[java] view plaincopyprint?

  1. package com.yanek.event;
  2. import java.io.IOException;
  3. import java.util.Properties;
  4. public class PropertyMgr {
  5. private static Properties props = new Properties();
  6. static {
  7. try {
  8. props.load(PropertyMgr.class.getClassLoader().getResourceAsStream("com/yanek/event/config.properties"));
  9. } catch (IOException e) {
  10. e.printStackTrace();
  11. }
  12. }
  13. public static String getProperty(String key) {
  14. return props.getProperty(key);
  15. }
  16. }
  package com.yanek.event;

import java.io.IOException;
import java.util.Properties;

public class PropertyMgr {
 private static Properties props = new Properties();

 static {
  try {
   props.load(PropertyMgr.class.getClassLoader().getResourceAsStream("com/yanek/event/config.properties"));
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

 public static String getProperty(String key) {
  return props.getProperty(key);
 }
}

7.相关配置文件:

配置分发器处理时需要的监听器实现类的列表。

config.properties

内容如下:

observers=com.yanek.event.IndexManager,com.yanek.event.ScoreManager,com.yanek.event.EmailManager

四 测试运行结果:

执行: EntryManager 即可看到效果:

add entry ...id=1
com.yanek.event.IndexManager
:[email protected]
com.yanek.event.ScoreManager
:[email protected]
com.yanek.event.EmailManager
:[email protected]
kaishi=1404547648004
IndexManager 处理 博客文章被创建事件。
ScoreManager 处理 博客文章被创建事件。
EmailManager 处理 博客文章被创建事件。
cost time=1
modify entry ...id=1
kaishi=1404547648006
IndexManager 处理 博客文章被修改事件。
ScoreManager 处理 博客文章被修改事件。
EmailManager 处理 博客文章被修改事件。
cost time=1
delete entry ...id=1
kaishi=1404547648007
IndexManager 处理 博客文章被删除事件。
ScoreManager 处理 博客文章被删除事件。
EmailManager 处理 博客文章被删除事件。
cost time=0

五。关于该方案系统如何实现灵活扩展

假设有如下需求增加了,比如 发表文章,修改文章,删除文章后需要需要给好友发短信通知或其他相关功能,则只需要再写一个监听器的实现类,加入到配置文件中即可。

具体就不写代码了,大家可以自己加上测试。

六、关于资源下载:

地址: http://download.csdn.net/detail/5iasp/7596885

本篇博文参加了CSDN博文大赛,如果您觉得这篇博文不错,希望您能帮我投一票,谢谢!

投票地址:http://vote.blog.csdn.net/Article/Details?articleid=37054171

学习是一种信仰,分享是一种美德

时间: 2024-10-02 04:16:30

关于JAVA中事件分发和监听机制实现的代码实例-绝对原创实用的相关文章

简述Java中Http/Https请求监听方法

一.工欲善其事必先利其器 做Web开发的人总免不了与Http/Https请求打交道,很多时候我们都希望能够直观的的看到我们发送的请求参数和服务器返回的响应信息,这个时候就需要借助于某些工具啦.本文将采用Fiddler2作为分析工具,Fiddler很强大,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据,是越墙抓包之利器.关于工具的介绍可以参考下面的链接: http://www.cnblogs.com/TankXiao/archive/2012/02

java GUI(UI创建与监听机制)

/* * GUI(Graphical User Interface):图像用户接口. * CLI:命令用户接口. * java为GUI提供的对象都在java.Awt中和javaSwing两个包中. * java.Awt:(Abstract Window ToolKit)抽象窗口工具包,需要调用本地系统方法实现功能.属于重量控件. * javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由java实现,增强了移植性,属于轻量级控件. * 一.布局:容器中

Java中事件分发线程(EDT)与SwingUtilities.invokeLater相关总结

前言:这篇文章严格来说不算原创,算是我对这方面知识的一点小结,素材来至其他网友.当然我在我写的C段查询工具也用到了这方面的东西,不过由于代码太多不方便用作事例,因此用了他人的素材总结一下,望理解O(∩_∩)O~ 一 Swing线程基础 一个Swing程序中一般有下面三种类型的线程:    * 初始化线程(Initial Thread)    * UI事件调度线程(EDT)    * 任务线程(Worker Thread)每个程序必须有一个main方法,这是程序的入口.该方法运行在初始化或启动线程

java中的四种监听类用法

在此列举四种方法: 自身类实现ActionListener接口,作为事件监听器 通过匿名类处理 通过内部类处理 通过外部类处理 下面依次介绍: 第一种:自身类实现ActionListener接口,作为事件监听器. 这种方法是最基本的,也是初学者经常使用的,我当初即是如此. import java.awt.Color; import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.ActionEvent;

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

Spring架构揭秘-事件监听机制

一.事件监听机制概述 二.事件监听机制结构 三.Spring监听机制架构 Spring的Application拥有发布事件并且注册事件监听器的能力,拥有一套完整的事件发布和监听机制.在Java中,通过java.util. EventObject来描述事件,通过java.util. EventListener来描述事件监听器,在众多的框架和组件中,建立一套事件机制通常是基于这两个接口来进行扩展. 在一个事件体系中,有以下几个重要的概念. 1.事件源:事件对象的产生者,任何一个EventObject

spring 自定义事件发布及监听(简单实例)

前言: Spring的AppilcaitionContext能够发布事件和注册相对应的事件监听器,因此,它有一套完整的事件发布和监听机制. 流程分析: 在一个完整的事件体系中,除了事件和监听器以外,还应该有3个概念: 1. 事件源:事件的产生者,任何一个event都必须有一个事件源: 2. 事件广播器:它是事件和事件监听器之间的桥梁,负责把事件通知给事件监听器: 3. 事件监听器注册表:就是spring框架为所有的监听器提供了一个存放的地方: 通过流程图,可以看出它们是如何各司其职的,如下: 其

Java中的事件监听机制

鼠标事件监听机制的三个方面: 1.事件源对象: 事件源对象就是能够产生动作的对象.在Java语言中所有的容器组件和元素组件都是事件监听中的事件源对象.Java中根据事件的动作来区分不同的事件源对象,动作发生在哪个组件上,那么该组件就是事件源对象 2.事件监听方法: addMouseListener(MouseListener ml) ;该方法主要用来捕获鼠标的释放,按下,点击,进入和离开的动作:捕获到相应的动作后,交由事件处理类(实现MouseListener接口)进行处理. addAction

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

事件监听机制的特点: 1.事件源 2.事件 3.监听器 4.事件处理 事件源:就是awt包或者swing包中的那些图形用户界面组件.(如:按钮) 事件:每一个事件源都有自己特点有的对应事件和共性事件.(如:鼠标单击事件) 监听器:将可以触发某一事件的动作(不止一个动作)都已经封装到了监听器中. 以上三者,在java中都已经定义好了,直接获取其对象来用就可以了. 我们要做的事情是,就是对产生的动作进行处理. 图解事件监听机制: 4.JAVA之GUI编程事件监听机制,布布扣,bubuko.com