我目前正在为GWT开发类似绘画的应用程序。我想添加一个鼠标处理程序,当用户将鼠标拖过画布时运行(如制作正方形等;),问题是我不确定要使用什么处理程序。查看在canvas中实现的处理程序已经引出了一些提示,但关于适用于哪个事件的文档很少。
有谁知道我应该如何实施它?谢谢。
答案 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!
要回答有关用于“拖动”的处理程序的问题,我还没有找到一个处理程序来为我执行此操作。相反,我使用了MouseDownHandler
,MouseMoveHandler
和MouseUpHandler
。
使用MouseDownHandler
设置一个标志,确定用户鼠标何时关闭。我这样做,以便在调用MouseMoveHandler
时它知道它是否应该做任何事情。最后,如果用户没有按下鼠标,请使用MouseUpHandler
来切换该标记。
这种方法存在一些缺陷(如果用户将鼠标拖离FocusPanel),但由于我的应用程序只是一个有趣的副项目,所以我并没有过多地关注它。如果它成为一个大问题,请添加其他处理程序来修复它。