1

Gwt HTML5 Canvas ラッパーは、マウスとキーボードのイベントに応答でき、5 ~ 6 種類の異なるイベントにバインドできます。私の質問は、CanvasEvent などのまったく新しいイベント システムを定義することが可能です (および関連するハンドラ CanvasEventHandler は GwtEvent などに拡張されます)。これをキャンバス オブジェクトにバインドし、ハンドラ インターフェイス メソッドを使用してすべてのイベントを異なる方法で処理します。メソッドは onDraw()、onDrag()、onMove()、onSelect() などになります

私はGWTイベントシステムをよく理解していませんが、私の問題を処理するためのロジックを形成するために個別のイベントハンドラーを個別にアタッチしなくてもこれが可能かどうかを知りたい. それを行う最善の方法は何でしょう.GWTカスタムイベントを持つスレッドがありますが、それらには送信者が含まれていますが、私の場合、送信者はすでに存在しています(キャンバス)

どうもありがとう

4

1 に答える 1

2

確かに - すべての GwtEvent オブジェクトは完全に人為的なものであり、ネイティブ JavaScript から発生したイベントに基づいていることに注意してください。その JavaScript イベント オブジェクト ( を介して入ってくる)は、元のオブジェクトの詳細に基づいてまたはonBrowserEventとしてラップされ、内部インスタンスを介して起動されます。同様に、 をリッスンし、何らかの状態を設定してから、が発生した場合に独自のイベントを発生させることができます。が発生したら、おそらくそれらの移動イベントのリッスンを停止し、. 移動せずにすぐに発生しない場合は、トリガーすることができます(または、その選択イベントに対して別のことを考えている可能性があります)。ClickEventKeyDownEventHandlerManagerMouseDownEventMouseMoveEventCanvasDragMouseUpEventCanvasDropEventMouseUpEventCanvasSelectEvent

宣言すると、これらの新しいイベント タイプのそれぞれに、何が起こっているかについての詳細が含まれる場合があります。たとえば、MouseMoveEvent にはマウスが置かれている要素と x/y 座標しかありませんが、ページ上でがドラッグされているかを示している可能性があります。それは、最後にクリックされた形状、またはそれが表すデータの形である可能性があります。

はい、「送信者」またはソースはすでにそこにありますが、などのハンドラーを追加する何らかのメソッドを公開すると、使いやすくなりますaddCanvasDragHandler。これは必須ではありません。コードのすべてのユーザーが使用できますaddHandler、しかし、ウィジェットが問題のイベントをサポートしているかどうかについて少しあいまいになります. fireEvent次に、canvas オブジェクトを呼び出して、そのイベント タイプのすべてのハンドラーをリッスンします。

または、内部Canvasウィジェットを含む新しいクラスを作成することもできます-おそらくCompositeオブジェクトまたは実装するものだけですIsWidget(Canvasにはプライベートコンストラクターがあるため、サブクラス化できません)。これにより、独自の特定のハンドラーを追加し、独自の HandlerManager/EventBus を保持して、関心のあるイベントを追跡できます。

于 2013-04-13T06:08:05.123 に答える