Revision 9 as of 2011-12-04 12:55:27

Clear message
Locked History Actions

GWT/Events

イベントシステム

参考

概要

GWTのイベントシステムは、Swingのものをアレンジしたものと言ってよい。基本的な用語は以下の通り

  • Source:Swingでのイベントソースと同じ意味。イベントの発行元オブジェクトで、オブザーバパターンでの「オブザーバブル」。
  • Event:Swingでのイベントとほぼ同じ意味。Swingと同様に、イベントオブジェクトは少なくともそのソースへの参照を持つが、加えて必要な任意の情報を保持してもよい。
  • EventHandler:Swingでいうところのリスナ。オブザーバパターンでの「オブザーバ」

  • HandlerManager(もしくはEventBus):Swingでいうところのリスナリスト。オブザーバブルオブジェクト上でオブザーバを管理するオブジェクト。

最も単純な形態

以下にできる限り単純なサンプルを示すが、一般的にはこのようなコードは作成しないものと思われる。

import com.google.web.bindery.event.shared.*;

public class SomeEvent extends Event<SomeEventHandler> {
  
  public static Type<SomeEventHandler>TYPE = new Type<SomeEventHandler>();
  
  @Override
  public Event.Type<SomeEventHandler>getAssociatedType() {
    return TYPE;
  }
  
  @Override
  protected void dispatch(SomeEventHandler handler) {
    handler.onSomething(this);
  }
}

public interface SomeEventHandler  {
  public void onSomething(SomeEvent e);
}

import com.google.web.bindery.event.shared.*;

public class Something {
  private EventBus eventBus = new SimpleEventBus();
  
  public void fireEvent() {
    eventBus.fireEvent(new SomeEvent()); 
  }
  
  public HandlerRegistration addSomeEventHandler(SomeEventHandler handler) {
    return eventBus.addHandler(SomeEvent.TYPE, handler);
  }
}

イベントオブジェクトの階層

GwtEvent

JavaDocの訳: Handlermanagerが発生するすべてのGWTウィジェットとDOMのイベントのルートとなる。 イベントを発生させたHandlerManagerが、それを完了させた後はGWTイベントは死んだ状態となるので、それ以降はアクセスしてはいけない。 アプリケーションのカスタムイベントをGwtEventのサブクラスとする必要はない。Eventのサブクラスとすることを推奨する。

DomEvent

JavaDocの訳: GwtEventのサブクラスであり、下層のネイティブなブラウザイベントオブジェクトとsinkEvents()で用いられるGWTイベントビットを理解するTypeのサブクラスを提供する (意味不明)。

HumanInputEvent

JavaDocの訳:マウス等の位置イベントやタッチイベント等を表現する抽象クラス。