2011-09-14 26 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上拖曳下来),但是因为我的应用程序只是一个有趣的项目,我并没有太在意自己的太多。如果它成为一个大问题,可以添加其他处理程序来解决这个问题。