知识大全 Java中使用观察者模式实现自定义事件

Posted 事件

篇首语:学问勤中得,富裕俭中来。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java中使用观察者模式实现自定义事件相关的知识,希望对你有一定的参考价值。

Java中使用观察者模式实现自定义事件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  MyEventTest java:

  package wintys event;

  import javax swing event EventListenerList;

  import java util Date;

  import java text DateFormat;

  import java text SimpleDateFormat;

  /**

  * Java的事件机制/自定义事件

  运行结果:

  do something interesting in source here

  listener detects [event]:wintys event MyEvent[source=wintys event MySource@

   ] [occur at]: : :

  listener detects [event]:wintys event MyEvent[source=wintys event MySource@

   ] [occur at]: : :

  * @version

  * @author 天堂露珠 ()

  * @see

  */

  class MyEventTest

  public static void main(String[] args)

  MySource source = new MySource();

  MyListener myListener = new MyListener()

  public void doMyAction(MyEvent e)

  System out println( listener detects + e);

  

  ;

  source addMyListener(myListener);

  source addMyListener(myListener);

  source addMyListener(myListener);

  source removeMyListener(myListener);

  source doSomething();

  

  

  /**

  * 自定义的事件

  * @version

  * @author 天堂露珠()

  * @see

  */

  class MyEvent extends java util EventObject

  private Date date;//记录事件发生的时间

  public MyEvent(Object source Date date)

  super(source);

  this date = date;

  

  public String toString()

  DateFormat df = new SimpleDateFormat( yyyy MM dd HH:mm:ss );

  String dt = df format(date);

  return [event]: + super toString() + [occur at]: + dt;

  

  

  /**

  * 自定义事件监听器接口

  * @version

  * @author 天堂露珠()

  * @see

  */

  interface MyListener extends java util EventListener

  void doMyAction(MyEvent e);

  

  /**

  * 自定义事件源

  * @version

  * @author 天堂露珠()

  * @see

  */

  class MySource

  /**

  * 保存注册的监听器列表

  * 子类可以使用它保存自己的事件监听器(非MyListener监听器)列表

  */

  protected EventListenerList listenerList = new EventListenerList();

  private MyEvent myEvent = null;//fireDoMyAction()使用此变量

  /**

  * 没有做任何事

  */

  public MySource()

  

  /**

  * 添加一个MyListener监听器

  */

  public void addMyListener(MyListener listener)

  listenerList add(MyListener class listener);

  

  /**

  * 移除一个已注册的MyListener监听器

  * 如果监听器列表中已有相同的监听器listener listener

  * 并且listener ==listener

  * 那么只移除最近注册的一个监听器

  */

  public void removeMyListener(MyListener listener)

  listenerList remove(MyListener class listener);

  

  /**

  * @return 在此对象上监听的所有MyListener类型的监听器

  */

  public MyListener[] getMyListeners()

  return (MyListener[])listenerList getListeners(MyListener class);

  

  //Winty:Copy directly from javax swing event EventListenerList

  /*Notify all listeners that have registered interest for

  notification on this event type The event instance

  is lazily created using the parameters passed into

  the fire method

  */

  protected void fireDoMyAction()

  // getListenerList() Guaranteed to return a non null array

  Object[] listeners = listenerList getListenerList();

  // Process the listeners last to first notifying

  // those that are interested in this event

  for (int i = listeners length ; i>= ; i = )

  if (listeners[i]==MyListener class)

  // Lazily create the event:

  if (myEvent == null)

  myEvent = new MyEvent(this new Date());

  ((MyListener)listeners[i+ ]) doMyAction(myEvent);

  

  

  

  /**

  * 做一些事件源应该做的有意义的事 然后通知监听器

  * 这里只是一个示例方法

  * 例如:MySource如果是一个按钮 则doSomething()就可以命名为click()

  * 当用户点击按钮时调用click()方法

  */

  public void doSomething()

  System out println( do something interesting here );

  fireDoMyAction();//通知监听器

  

  

cha138/Article/program/Java/hx/201311/26237

相关参考

知识大全 c#自定义控件中事件的处理

  usingSystem; cha138/Article/program/net/201311/14278

知识大全 c# 实现自定义属性改变触发自定义事件

  代码内含说明(界面是两个文本框textboxtextbox和一个button界面的Load事件button的click事件)usingSystem;usingSystemCollectionsGe

知识大全 PowerBuilder使用自定义事件触发键盘Enter事件

PowerBuilder使用自定义事件触发键盘Enter事件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 图学PowerBuilder---(自定义)事件

图学PowerBuilder---(自定义)事件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 JQuery的自定义事件代码,触发,绑定

JQuery的自定义事件代码,触发,绑定  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  自定义事

知识大全 Asp.net 用户控件添加自定义事件

Asp.net用户控件添加自定义事件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n

知识大全 JQuery的自定义事件代码,触发,绑定简单实例

JQuery的自定义事件代码,触发,绑定简单实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!下面

知识大全 自定义事件实现不同窗体间的通讯C#篇

自定义事件实现不同窗体间的通讯C#篇  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  C#中的事件

知识大全 自定义事件实现不同窗体间的通讯Delphi篇

自定义事件实现不同窗体间的通讯Delphi篇  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!要实现子

知识大全 Java自定义简单标签实例

Java自定义简单标签实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!Java自定义简单标签可以