A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© pi408637535 中级黑马   /  2015-7-17 11:56  /  272 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

监听器接口定义了一个类要成为监听器必须具备的功能。所有的监听器接口也都必须继承监听器接口基类 java.util.EventListener;EventListener本身没有定义任何方法,它只是一个标志接口,用来表明所有继承自 EventListener的接口属于监听器接口。
监听器接口定义了监听器必须实现的方法。可以在监听器接口中定义任意多的事件处理方法,取决于应用所需,事件处理方法以事件对象作为入口参数,包含对事件进行处理的代码,方法名称任意,如processEvent或者handleEvent之类。

监听器是监听器接口的实现者,提供监听器接口中定义的所有方法的实现代码。简单情形下,一个监听器只监听一种类型的事件,即实现一种监听器接口。复杂的监 听器可以实现多种监听器接口,监听多种类型的事件。在事件处理方法代码中,监听器可以从入口参数中获得事件对象,并通过该对象获得所需的信息,例如事件 源、事件发生时间等等。事件源是一定可以从事件对象中 获得的,因为事件基类EventObject提供了getSource()方法,除此以外,能从事件对象中获得的信息,取决于事件类的定义。

作为事件源的类,必需满足以下条件:
事件源必须在内部维护一个已注册监听器的列表。当某监听器注册时,该监听器被添加到列表中,而监听器注销时,则从列表中删除;
事件源必须提供注册方法,以允许监听器注册为事件的接收者;
事件源必须提供注销方法,以允许监听器注销,停止对事件的接收;
事件源必须能够实例化事件类,即产生事件对象;
当事件对象被产生后,事件源必须向所有的注册监听器广播该消息。事件的广播,是通过逐个调用监听器列表中所有监听器的事件处理方法来实现的。

在Java的事件驱动模式中,事件源是最复杂的。多数情况下,程序员只需编写监听器的代码,而并不需要编写事件源代码。
  1. public class DemoSource {


  2. public DemoSource() {


  3. }



  4. //触发DemoEvent事件。


  5. public void fireEvent() {


  6. DemoEvent event = new DemoEvent(this);


  7. broadcast(event);


  8. }


  9. // 监听器列表


  10. private List<DemoListener> listenerList = new ArrayList<DemoListener>();


  11. // 监听器注册方法


  12. public void addListener(DemoListener listener) {


  13. listenerList.add(listener);


  14. }


  15. // 监听器注销方法


  16. public void removeListener(DemoListener listener) {


  17. listenerList.remove(listener);


  18. }


  19. // 事件广播方法


  20. public void broadcast(DemoEvent event) {


  21. for(DemoListener listener : listenerList)


  22. listener.handleEvent(event);


  23. }


  24. }

  25. //事件定义
  26. public class DemoEvent extends EventObject{
  27. public DemoEvent(DemoSource source){
  28. super(source)
  29. }
  30. }

  31. //监听器接口定义
  32. public interface DemoListener extends EventListener{
  33. public void eventHandle(DemoEvent e);
  34. }

  35. //监听器定义
  36. public class MyListener implements DemoListener{
  37. public void eventHandle(DemoEvent e){
  38. ...
  39. }
  40. }

  41. //事件驱动
  42. 构造事件源对象,调用fireEvent方法,监听器就会执行相应的代码。
复制代码
您需要登录后才可以回帖 登录 | 加入黑马