Deletions are marked like this. | Additions are marked like this. |
Line 17: | Line 17: |
* HandlerManager: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); } } }}} |
イベントシステム
参考
http://www.dev-articles.com/article/Gwt-EventBus-%28HandlerManager%29-the-easy-way-396001
http://stackoverflow.com/questions/998621/gwt-custom-event-handler
概要
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); } }
イベントオブジェクトの階層
- Event
GwtEvent
JavaDocの訳: Handlermanagerが発生するすべてのGWTウィジェットとDOMのイベントのルートとなる。 イベントを発生させたHandlerManagerが、それを完了させた後はGWTイベントは死んだ状態となるので、それ以降はアクセスしてはいけない。 アプリケーションのカスタムイベントをGwtEventのサブクラスとする必要はない。Eventのサブクラスとすることを推奨する。
DomEvent
JavaDocの訳: GwtEventのサブクラスであり、下層のネイティブなブラウザイベントオブジェクトとsinkEvents()で用いられるGWTイベントビットを理解するTypeのサブクラスを提供する (意味不明)。
HumanInputEvent
JavaDocの訳:マウス等の位置イベントやタッチイベント等を表現する抽象クラス。