2011-09-14 6 views
1

私は現在、GWT用のペイントのようなアプリケーションを開発中です。私はユーザーがキャンバスの上にマウスをドラッグして(正方形などのように)ドラッグしたときに実行されるマウスハンドラを追加したいと思っています。問題は私が使用するハンドラが不明なことです。キャンバスに実装されたハンドラを見ていくと、いくつかのヒントが得られますが、どのようなイベントが適用されるかに関するドキュメントがありません。GWTキャンバスでドラッグマウスハンドラーを使用する

私はそれをどのように実装すべきか知っていますか?ありがとう。

答えて

6

「ドラッグ」ハンドラはありません。 MouseDown、MouseMove、およびMouseUpイベントを使用して「ドラッグ」することができます。

class YourWidget extends Composite 
{ 
    @UiField 
    Canvas yourCanvas; 

    private boolean dragging; 
    private HandlerRegistration mouseMove; 

    @UiHandler("yourCanvas") 
    void onMouseDown(MouseDownEvent e) { 
     dragging = true; 
     // do other stuff related to starting of "dragging" 
     mouseMove = yourCanvas.addMouseMoveHandler(new MouseMoveHandler(){ 
      public void onMouseMove(MouseMoveEvent e) { 
       // ...do stuff that you need when "dragging" 
      } 
     }); 
    } 

    @UiHandler("yourCanvas") 
    void onMouseUp(MouseUpEvent e) { 
     if (dragging){ 
      // do other stuff related to stopping of "dragging" 
      dragging = false; 
      mouseMove.remove(); // in earlier versions of GWT 
      //mouseMove.removeHandler(); //in later versions of GWT 
     } 
    } 
} 
+0

GWT 2.6.0では 'mouseMove.remove()'は 'mouseMove.removeHandler();です(以前のバージョンについてはわかりません) – Aerus

0

私もこれで周り台無しとしばらく前に、この小さな事を制作しました:私はFocusPanelに必要なものは何でも

http://alpha2.colorboxthing.appspot.com/#/

私は基本的に包まれました。私の場合、それはFlowPanelでした。私UiBinderサンプルメッセージで、そのプログラムから

私は(ちょうど上記FocusPanelを取得し、下に見display.getBoxFocus())フォーカスパネルを使用する方法
<g:FocusPanel ui:field="boxFocus" styleName="{style.boxFocus}"> 
    <g:FlowPanel ui:field="boxPanel" styleName="{style.boxFocus}"></g:FlowPanel> 
</g:FocusPanel> 

display.getBoxFocus().addClickHandler(new ClickHandler() { 
    @Override 
    public void onClick(ClickEvent event) {  
    } 
}); 

display.getBoxFocus().addMouseDownHandler(new MouseDownHandler() { 
    @Override 
    public void onMouseDown(MouseDownEvent event) { 
    } 
}); 

display.getBoxFocus().addMouseMoveHandler(new MouseMoveHandler() { 
    @Override 
    public void onMouseMove(MouseMoveEvent event) { 
    } 
}); 

display.getBoxFocus().addMouseUpHandler(new MouseUpHandler() { 
    @Override 
    public void onMouseUp(MouseUpEvent event) { 
    } 
}); 

// etc! 

あなたの質問に答えるためにどのハンドラが「ドラッグ」のために使うべきかについて私はハンドラが私のためにそれをするのを見つけませんでした。代わりに私はMouseDownHandler,MouseMoveHandler、およびMouseUpHandlerを使用しました。

MouseDownHandlerを使用して、ユーザーのマウスがいつダウンしたかを決定するフラグを設定します。私はこれを行うので、MouseMoveHandlerが呼び出されたとき、それは何かをするべきかどうかを知っています。最後に、MouseUpHandlerを使用して、ユーザーがマウスを押し下げた場合にそのフラグを切り替えます。

あり(ユーザーがFocusPanelの外にマウスをドラッグした場合)、この方法では、いくつかの欠点でしたが、私のアプリケーションは、私はあまりそれを自分自身を心配していないだけで楽しいサイドプロジェクトだったのでしています。他のハンドラを追加して、それが大きな問題になる場合は修正してください。

関連する問題