java中的事件机制的参与者有3种角色:

1.event object:事件状态对象,用于listener的相应的方法之中作为参数,一般存在与listerner的方法之中

2.event source:具体的事件源,比如说,你点击一个button,那么button就是event source,要想使button对某些事件进行响应,你就需要注册特定的listener。

3.event listener:对每个明确的事件的发生,都相应地定义一个明确的Java方法。这些方法都集中定义在事件监听者(EventListener)接口中,这个接口要继承 java.util.EventListener。 实现了事件监听者接口中一些或全部方法的类就是事件监听者。

(个人理解:)

将需要监听的对象封装在自定义的事件状态对象类(EventObject)中,这个类必须继承java.util.EventObject。事件状态对象作为单参传递给应响应该事件的自定义监听器方法中。该自定义监听器需实现自定义监听接口,实现此接口中以事件状态对象为参数的方法。发出某种特定事件的事件源:必须在类中实例化自定义的监听器对象,当监听到event object时,调用相应方法进行处理。

先看看jdk提供的event包:

public interface EventListener:所有事件侦听器接口必须扩展的标记接口。

public class EventObject extends Object implements Serializable
所有事件状态对象都将从其派生的根类。 所有 Event 在构造时都引用了对象 "source",在逻辑上认为该对象是最初发生有关 Event 的对象。

举例:

  1. //自定义的事件状态对象类
  2. class MyEvent extends EventObject
  3. {
  4. private Object obj;
  5. //此监听对象可以是自定义对象
  6. private String sName;
  7. public MyEvent(Object source,String sName)
  8. {
  9. super(source);
  10. this.obj=source;
  11. this.sName=sName; }
  12. public Object getObj()
  13. {
  14. return obj;
  15. }
  16. public String getsName()
  17. {
  18. return sName;
  19. }
  20. }
  21. //定义自定义监听器接口,继承EventListener
  22. interface MyEventListener extends EventListener
  23. {
  24. void handleEvent (MyEvent me);
  25. }
  26. //定义事件源
  27. class MyEventSource
  28. {
  29. private Vector list=new Vector();
  30. private String sName = "";
  31. public MyEventSource()
  32. {
  33. super();
  34. }
  35. public void addMyEventListener(MyEventListener me)
  36. {
  37. list.add(me);
  38. }
  39. public void deleteMyEventListener(MyEventListener me)
  40. {
  41. list.remove(me);
  42. }
  43. public void notifyMyEvent(MyEvent me)
  44. {
  45. Iterator it=list.iterator();
  46. while(it.hasNext())
  47. {
  48. //在类中实例化自定义的监听器对象,并调用监听器方法
  49. ((MyEventListener) it.next()).handleEvent(me);
  50. }
  51. }
  52. public void setName(String str)
  53. { boolean bool = false;
  54. if (str == null && sName != null)
  55. bool = true;
  56. else if (str != null && sName == null)
  57. bool = true;
  58. else if (!sName.equals(str))
  59. bool = true;
  60. this.sName = str;
  61. // 如果改变则执行事件
  62. if (bool)
  63. notifyMyEvent(new MyEvent(this, sName));
  64. }
  65. public String getsName()
  66. { return sName; }
  67. }
  68. //自定义监听器,继承自定义监听接口
  69. class Mylistener implements MyEventListener
  70. {
  71. public Map<Integer, String> map =null;
  72. public int i=0;
  73.  
  74. public Mylistener(Map<Integer, String> map)
  75. {
  76. this.map = map;
  77. MyEventSource mes = new MyEventSource();
  78. mes.addMyEventListener(this);
  79. mes.setName("niu");
  80. }
  81.  
  82. //实现接口中的方法
  83. public void handleEvent(MyEvent me)
  84. {
  85. System.out.println("me.getSource() "+me.getSource());
  86. System.out.println("me.getsName() "+me.getsName());
  87. //此处可以将写,将监听到的对象存入map中
  88. map.put(++i, me.getsName());
  89. }
  90. }
  91. //主函数
  92. public class test2
  93. {
  94. public static void main(String args[])
  95. {
  96. Map<Integer, String> map = new HashMap<Integer, String>();
  97. Mylistener mylistener = new Mylistener(map);
  98. }
  99. }

实际运用可能是:

事件源是一个一直接收的线程,线程中一直监听需要监听的对象

在主函数中执行两个线程

1.事件源的接收线程

2.一个计时器,每隔一段时间先试一下监听到的对象个数

  1. TimerTask task = new TimerTask() {
  2. @Override
  3. public void run() {
  4. System.out.println("size:"+DPMap.size());
  5. }
  6. };
  7.  
  8. Calendar calendar = Calendar.getInstance();
  9. Date firstTime = calendar.getTime();
  10. Timer timer = new Timer();
  11. timer.schedule(task, firstTime, 20*1000);

java事件监听机制(自定义事件)的更多相关文章

  1. [置顶] flex4事件监听与自定义事件分发(三)

    1.我们来说一下自定义事件子类.什么时候创建新的事件类以及怎么创建. (1)说一下,我们什么时候需要自定义事件类.举例说明,在flex中事件的基类是Event,而当我们点击某个按钮或者是单击某个组件的 ...

  2. 事件监听机制——鼠标事件MouseEvent

    鼠标事件 鼠标事件包括鼠标的双击.左击.右击.中间键等等,本文进行事件加载进行简单介绍,具体可以参考键盘事件. import java.awt.*; import java.awt.event.*; ...

  3. 图形用户界面(GUI)事件监听机制——窗体事件Frame

    窗体事件.Button的使用 本事例给出一个窗体的定义方法,基本属性设置,给窗体添加退出按钮,让按钮具备退出的功能.熟悉监听器的使用 按钮就是事件源. 那么选择哪一个监听器呢? 通过关闭窗体事例了解到 ...

  4. Java事件监听机制与观察者设计模式

    一. Java事件监听机制 1. 事件监听三要素: 事件源,事件对象,事件监听器 2. 三要素之间的关系:事件源注册事件监听器后,当事件源上发生某个动作时,事件源就会调用事件监听的一个方法,并将事件对 ...

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

    事件监听机制的特点: 1.事件源 2.事件 3.监听器 4.事件处理 事件源:就是awt包或者swing包中的那些图形用户界面组件.(如:按钮) 事件:每一个事件源都有自己特点有的对应事件和共性事件. ...

  6. GUI编程笔记(java)05:GUI事件监听机制原理和举例说明

    1.事件监听机制:       A:事件源          事件发生的地方       B:事件             就是要发生的事情       C:事件处理       就是针对发生的事情做 ...

  7. JAVA事件监听机制学习

    //事件监听机制 import java.awt.*; import java.awt.event.*; public class TestEvent { public static void mai ...

  8. Java中的事件监听机制

    鼠标事件监听机制的三个方面: 1.事件源对象: 事件源对象就是能够产生动作的对象.在Java语言中所有的容器组件和元素组件都是事件监听中的事件源对象.Java中根据事件的动作来区分不同的事件源对象,动 ...

  9. java Gui编程 事件监听机制

    1.     GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式:   1. 命令交互方式    图书管理系统 ...

  10. Java swing(awt):事件监听机制的实现原理+简单示例

    (1)实现原理 事件监听机制的实现: 参考图:事件模型_ActionEvent 为了节省资源,系统无法对某个事件进行实时的监听.故实现的机制是当发生某个事件后,处理代码将被自动运行,类似钩子一般.(回 ...

随机推荐

  1. Binary Tree Preorder Traversal —— LeetCode

    Given a binary tree, return the preorder traversal of its nodes' values. For example:Given binary tr ...

  2. HDOJ 2081 手机短号

    Problem Description 大家都知道,手机号是一个11位长的数字串,同时,作为学生,还可以申请加入校园网,如果加入成功,你将另外拥有一个短号.假设所有的短号都是是 6+手机号的后5位,比 ...

  3. [Theano] Theano初探

    1. Theano用来干嘛的? Theano was written at the LISA lab to support rapid development of efficient machine ...

  4. Codeforces Round #326 (Div. 1) - C. Duff in the Army 树上倍增算法

    题意:一个n个点的数, m个人住在其中的某些点上, 每个人的标号1-m, 询问u-v 路径上标号前a个人,并输出标号,a < 10. 作法, 利用倍增, ID[j][i] 表示i到i的第2^j个 ...

  5. poj1019

    有一个序列 1 12 123 1234 ..... ........ ........... 12345678910 ................................ 求第n个数字是什 ...

  6. .NET中的程序集(Assembly)

    在.NET 中,新引入了一个程序集的概念,就是指经由编译器编译得到的,供CLR进一步编译执行的那个中间产物,在WINDOWS系统中,它一般表现为.dll,或者是.exe的格式,但是要注意,它们跟普通意 ...

  7. 怎样把redis编译为库,挪为己用?

    其实这是个伪命题.因为只要正常编译redis,那么在 /deps/hiredis/ 目录下就会生成动态库文件 libhiredis.so. 为了便于学习redis源码,编写一些测试程序,并进行单步跟踪 ...

  8. tcp dump 截取http

    监听命令 sudo tcpdump -w mm.txt -s 0 -A -v  tcp dst port 8080 -w mm.txt :把记录下来的数据已二进制格式存储在mm.txt文件内  -w ...

  9. JSP中的路径

    我的原则 所有路径一律使用绝对路径,就是以"/"开头的或者带host的路径.形如: /imgs/1.jpg <%= request.getContextPath()%> ...

  10. 统计学习导论:基于R应用——第二章习题

    目前在看统计学习导论:基于R应用,觉得这本书非常适合入门,打算把课后习题全部做一遍,记录在此博客中. 第二章习题 1. (a) 当样本量n非常大,预测变量数p很小时,这样容易欠拟合,所以一个光滑度更高 ...