使用带有GWT画布的拖动鼠标处理程序

时间:2011-09-14 01:54:18

标签: gwt canvas mouseevent

我目前正在为GWT开发类似绘画的应用程序。我想添加一个鼠标处理程序,当用户将鼠标拖过画布时运行(如制作正方形等;),问题是我不确定要使用什么处理程序。查看在canvas中实现的处理程序已经引出了一些提示,但关于适用于哪个事件的文档很少。

有谁知道我应该如何实施它?谢谢。

2 个答案:

答案 0 :(得分: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
      }
    }
}

答案 1 :(得分: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!

要回答有关用于“拖动”的处理程序的问题,我还没有找到一个处理程序来为我执行此操作。相反,我使用了MouseDownHandlerMouseMoveHandlerMouseUpHandler

使用MouseDownHandler设置一个标志,确定用户鼠标何时关闭。我这样做,以便在调用MouseMoveHandler时它知道它是否应该做任何事情。最后,如果用户没有按下鼠标,请使用MouseUpHandler来切换该标记。

这种方法存在一些缺陷(如果用户将鼠标拖离FocusPanel),但由于我的应用程序只是一个有趣的副项目,所以我并没有过多地关注它。如果它成为一个大问题,请添加其他处理程序来修复它。

相关问题