2011-09-14 49 views
1

我目前正在爲GWT開發一個類似油漆的應用程序。我想添加一個鼠標處理程序,當用戶在畫布上拖動鼠標時運行(例如製作方塊等),問題是我不確定使用哪個處理程序。仔細查看canvas中實現的處理程序,我已經提供了一些提示,但關於哪些事件適用的文檔很少。使用拖動鼠標處理程序與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

'mouseMove.remove()'是'mouseMove.removeHandler();'在GWT 2.6.0中(我不知道以前的版本) – Aerus

0

我搞砸周圍的這個問題,以及和前一段時間產生的這個小東西:

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

我基本上包裹任何我需要用FocusPanel。在我的情況下,它是一個FlowPanel。

從我UiBinder的該程序:

<g:FocusPanel ui:field="boxFocus" styleName="{style.boxFocus}"> 
    <g:FlowPanel ui:field="boxPanel" styleName="{style.boxFocus}"></g:FlowPanel> 
</g:FocusPanel> 

我如何使用調焦面板(display.getBoxFocus()看到下面只得到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,MouseMoveHandlerMouseUpHandler

使用MouseDownHandler來設置一個標誌,該標誌確定用戶鼠標何時關閉。我這樣做是爲了在調用MouseMoveHandler時知道它是否應該做任何事情。最後使用MouseUpHandler切換該標誌,如果用戶有鼠標關閉或沒有。

該方法存在一些缺陷(如果用戶將他們的鼠標從FocusPanel上拖曳下來),但是因爲我的應用程序只是一個有趣的項目,我並沒有太在意自己的太多。如果它成爲一個大問題,可以添加其他處理程序來解決這個問題。