5

私はswingとgwtの両方で実装する必要があるいくつかの簡単なグラフ作成ソフトウェアの開発に取り組んでいます。gwt側では、キャンバスにgwt-g2dを使用します。一部のソフトウェアを簡素化するために、両方の実装でイベントバスを使用することを望んでいました。

私の理解では、それは次のようなものでなければなりません:

  1. EventBusをインスタンス化します
  2. 親ウィジェットをインスタンス化し、EventBusに必要なイベントをシンクします(たとえば、マウスオーバーまたはrpcコールバック)
  3. 親ウィジェットからのイベントをリッスンするようにEventBusを設定します。
  4. 子ウィジェットをインスタンス化します。このウィジェットは、持っているリスナーをEventBusに登録する必要があります(発生する可能性のあるイベントを登録する必要がありますか?)
  5. EventBusはイベントを受信すると、イベントについて決定を下し、その決定に基づいて行動する必要があります。これは、イベントを無視するか、イベントタイプを変更するか、または該当するすべての子ウィジェットに中継することを意味します。

これは一般的にどのように機能する必要がありますか?SimpleEventBusはまだ新しいものであり、実際の使用方法についてはWeb上であまり見つけることができません。

4

2 に答える 2

2

SimpleEventBus は、ハンドラーのコレクションを格納し、必要に応じて関連するすべてのハンドラーで event.dispatch() を呼び出すという非常に基本的な機能を提供します。親ウィジェットから「イベントをリッスンするように EventBus を設定する」とは言いません。SimpleEventBus には「親」という概念がありません。代わりに、SimpleEventBus への参照を渡します。次に、SimpleEventBus.fireEvent メソッドを使用して、どのオブジェクトでも「イベントを発生させる」ことができます。階層はありません。

同様に、どのオブジェクトも SimpleEventBus.addHandler() を使用してこれらのイベントをリッスンできます。これは#4に最も近いです- addHandler はイベントのタイプとハンドラーを受け取るため、そのタイプのイベントがfireEvent(アプリ内の何かによって)渡されるたびに、そのハンドラーがイベントに渡されます。EventEventBus ではなく、 がハンドラを呼び出すことに注意してください。EventBus は event.dispatch(theHandler) を呼び出すだけで、イベントのプログラマーは theHandler で適切な関数を呼び出す責任があります。少なくともSimpleEventBusの場合、#5は不正確です-SimpleEventBusは、呼び出すハンドラーを確認することを除いて、イベントをまったく検査しません。子ウィジェットやアプリ ロジックを認識せず、イベントのタイプを変更することはありません。

選択されたリージョンを確認するロジックは、EventBus では適切ではありません。代わりに、ロジックを実行して ClickEvents をリッスンするハンドラーを作成します。次に、そのハンドラーは選択された領域に直接選択されたことを伝えるか、EventBus に沿って起動できる独自の RegionSelectionEvent を作成し、RegionSelection が発生したことをすべての領域に通知し、ロガーを取得できます。通知、またはサーバーモニターが通知を受け取り、誰かが地域を選択したことを上司に通知することができます。1 つのリージョンの選択を解除して別のリージョンを選択するだけの場合、イベントバスは過剰です。

一方、「サイズ変更」イベントのようなものは、すべてのウィジェットがそれについて知る必要があるかもしれないので、非常に理にかなっています。

于 2010-11-24T05:22:18.343 に答える
0

私がGWTEventBusを理解している限り、これはアプリケーション全体のイベントを対象としています(「システム全体のオブジェクトx変更されたプロパティy」と考えてください。その特定のイベントをリッスンするものはすべて、それに基づいて動作できます)。これは、アプリケーションロジックを分離するのに役立ちます。

おそらく、UIイベントを発生させたくないでしょう。親ウィジェットはハンドラーを実装することも、匿名インスタンスを使用することもできます。

于 2010-11-23T21:53:59.557 に答える