Java中的事件提升处理

bdh*_*har 6 java events

如何在Java中引发自定义事件和句柄.一些链接会有所帮助.

谢谢.

Pav*_*aev 15

Java中没有一流的事件.所有事件处理都使用接口和侦听器模式完成.例如:

// Roughly analogous to .NET EventArgs
class ClickEvent extends EventObject {
  public ClickEvent(Object source) {
    super(source);
  }
}

// Roughly analogous to .NET delegate
interface ClickListener extends EventListener {
  void clicked(ClickEvent e);
} 

class Button {
  // Two methods and field roughly analogous to .NET event with explicit add and remove accessors
  // Listener list is typically reused between several events

  private EventListenerList listenerList = new EventListenerList();

  void addClickListener(ClickListener l) {
    clickListenerList.add(ClickListener.class, l)
  }

  void removeClickListener(ClickListener l) {
    clickListenerList.remove(ClickListener.class, l)
  }

  // Roughly analogous to .net OnEvent protected virtual method pattern -
  // call this method to raise the event
  protected void fireClicked(ClickEvent e) {
    ClickListener[] ls = listenerList.getListeners(ClickEvent.class);
    for (ClickListener l : ls) {
      l.clicked(e);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

客户端代码通常使用匿名内部类来注册处理程序:

Button b = new Button();
b.addClickListener(new ClickListener() {
  public void clicked(ClickEvent e) {
    // handle event
  }
});
Run Code Online (Sandbox Code Playgroud)


小智 5

Java缺乏内部事件处理,但有一些库可以帮助您实现这一目标.查看javaEventing,http://code.google.com/p/javaeventing/ 它的工作方式与首先定义事件的C#一样,然后注册事件监听器.您可以使用EventManager.triggerEvent(.. someEvent)触发事件.它还允许您为事件提供自定义条件和有效负载.

短发