如何自己定制事件的API

最近的实习需要用到手势识别系统,所以不能再用JAVA自带的鼠标API,被要求写一个通用的事件接口程序。

通过对比ActionEvent这个例子,可以简单的知道至少需要3个class,一个定义事件,一个激发事件的组件,还有一个接口给别人实现

 

  1.  

  2. The component
  3. The event class
  4. The listener interface

组件
组件激发event。event是让listener知道事情发生的方法。因此一个组件需要提供注册和注销event  listener的机制。组件还必须储存这些listener然后把events发送给这些listener。 因此这个组件需要对会发生的所有类型的event拥有addXXXListener and removeXXXListener方法。当然这个组件还需要存储listener。通常可以将listener存储到java.util.Vector或者javax.swing.event.EventListenerList。为了将event激发给listener需要用循环激发每个listener

例如:

XXXEvent.。

...
EventListenerList xxxListeners = new EventListnerList();

public void addXXXListener(XXXListener listener)
{
     xxxListeners.add(XXXListener.class, listener);
}

public void removeXXXListener(XXXListener listener)
{
     xxxListeners.remove(XXXListener.class, listener);
}

protected void fireXXX(XXXEvent xxxEvent)
{
     Object[] listeners = xxxListeners.getListenerList();

     // loop through each listener and pass on the event if needed
     Int numListeners = listeners.length;
     for (int i = 0; i<numListeners; i+=2)
     {
          if (listeners[i]==XXXListener.class)
          {
               // pass the event to the listeners event dispatch method
                ((XXXListener)listeners[i+1]).dispatchXXX(xxxEvent);
          }            
     }
}

这个例子可以看出注册,注销和激发不用类型的

event class
event类存储了对listener有关的的所有会发生的事情的信息。这个类需要很仔细的考虑和设计

listener interface
event listener接口类定义了抽象的方法给组件发送event,每种类型的event在接口类中至少拥有一个相对应的抽象方法

listener interface通常是下面的这种格式:

XXXListener interface 同时也要把自己注册到组件中。当一个event发生,组件才会正确的激发发送event的方法。

public interface XXXListener      
     extends EventListener
{
     // event dispatch methods
     somethingHappened(XXXEvent e);
     somethingElseHappened(XXXEvent e);
     ...
}

为了监听事件,listener必须implement

基本的结构就是这样的,剩下来的就是具体的应用这个API了,我想用过ActionEvent的人都知道具体的几个步骤,唯一不太一样的就是需要自己创建组件的实例。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值