使用鼠标输入管理画布需要添加HandlerRegistration。以下是我如何做到这可以帮助你把东西放在一起。
我当前项目中的这个类在模块之间来回传递。
/* PreviewCanvas replaces Canvas which makes it more reliable when
* adding and removing mouse handlers as the reference gets passed
* through to the editing module and then through to the size bar.
* At least now it can remove any handlers when initiating another
* module editor.
*/
public class PreviewCanvas {
public Canvas canvas;
// handler registrations (allows sharing across modules)
public HandlerRegistration mousedown = null;
public HandlerRegistration mouseup = null;
public HandlerRegistration mousemove = null;
public PreviewCanvas() {}
public void setHandlers(HandlerRegistration mousedownhandler,
HandlerRegistration mouseuphandler,
HandlerRegistration mousemovehandler) {
mousedown = mousedownhandler;
mouseup = mouseuphandler;
mousemove = mousemovehandler;
}
public void removeHandlers() {
if (mousedown != null) {
mousedown.removeHandler();
mousedown = null;
}
if (mouseup != null) {
mouseup.removeHandler();
mouseup = null;
}
if (mousemove != null) {
mousemove.removeHandler();
mousemove = null;
}
}
}
要设置处理程序供自己使用:
canvas.clearHandlers();
HandlerRegistration mousedownhandler = canvas.canvas.addMouseDownHandler(new MouseDownHandler() {
@Override
public void onMouseDown(MouseDownEvent event) { // mouse DOWN
int x = event.getX();
int y = event.getY();
// etc ...
}
});
HandlerRegistration mouseuphandler = canvas.canvas.addMouseUpHandler(new MouseUpHandler() {
@Override
public void onMouseUp(MouseUpEvent event) { // mouse UP
if (mousedown) {
int x = event.getX();
int y = event.getY();
// etc ...
}
mousedown = false;
}
});
HandlerRegistration mousemovehandler = canvas.canvas.addMouseMoveHandler(new MouseMoveHandler() {
@Override
public void onMouseMove(MouseMoveEvent event) { // mouse MOVE
if (mousedown) {
int x = event.getX();
int y = event.getY();
// etc ...
}
}
});
// PreviewCanvas var
canvas.setHandlers(mousedownhandler, mouseuphandler, mousemovehandler);
希望这有助于...
我认为你在正确的方向的时候,并修补了“,但加入鼠标事件处理程序到我的画布对象不追踪任何“问题。 – Andrei