確かに - すべての GwtEvent オブジェクトは完全に人為的なものであり、ネイティブ JavaScript から発生したイベントに基づいていることに注意してください。その JavaScript イベント オブジェクト ( を介して入ってくる)は、元のオブジェクトの詳細に基づいてまたはonBrowserEventとしてラップされ、内部インスタンスを介して起動されます。同様に、 をリッスンし、何らかの状態を設定してから、が発生した場合に独自のイベントを発生させることができます。が発生したら、おそらくそれらの移動イベントのリッスンを停止し、. 移動せずにすぐに発生しない場合は、トリガーすることができます(または、その選択イベントに対して別のことを考えている可能性があります)。ClickEventKeyDownEventHandlerManagerMouseDownEventMouseMoveEventCanvasDragMouseUpEventCanvasDropEventMouseUpEventCanvasSelectEvent
宣言すると、これらの新しいイベント タイプのそれぞれに、何が起こっているかについての詳細が含まれる場合があります。たとえば、MouseMoveEvent にはマウスが置かれている要素と x/y 座標しかありませんが、ページ上で何がドラッグされているかを示している可能性があります。それは、最後にクリックされた形状、またはそれが表すデータの形である可能性があります。
はい、「送信者」またはソースはすでにそこにありますが、などのハンドラーを追加する何らかのメソッドを公開すると、使いやすくなりますaddCanvasDragHandler。これは必須ではありません。コードのすべてのユーザーが使用できますaddHandler、しかし、ウィジェットが問題のイベントをサポートしているかどうかについて少しあいまいになります. fireEvent次に、canvas オブジェクトを呼び出して、そのイベント タイプのすべてのハンドラーをリッスンします。
または、内部Canvasウィジェットを含む新しいクラスを作成することもできます-おそらくCompositeオブジェクトまたは実装するものだけですIsWidget(Canvasにはプライベートコンストラクターがあるため、サブクラス化できません)。これにより、独自の特定のハンドラーを追加し、独自の HandlerManager/EventBus を保持して、関心のあるイベントを追跡できます。