我正在使用GWT,并希望在用户在GWT按钮上按住鼠标左键时执行操作。但我找不到合适的事件处理程序或该问题的其他解决方案。
在GWT中有没有办法点击按钮,按住鼠标按钮并一次又一次地执行相同的动作,直到鼠标按钮被释放?
Button scrollUpBtn = new Button("Top");
scrollUpBtn.setWidth("66px");
scrollUpBtn.addMouseDownHandler(new MouseDownHandler() {
@Override
public void onMouseDown(MouseDownEvent event) {
//handCards.setVerticalScrollPosition(handCards.getVerticalScrollPosition() - 10);
mouseUp = true;
}
});
scrollUpBtn.addMouseUpHandler(new MouseUpHandler() {
@Override
public void onMouseUp(MouseUpEvent event) {
mouseUp = false;
}
});
scrollUpBtn.addKeyDownHandler(new KeyDownHandler() {
@Override
public void onKeyDown(KeyDownEvent event) {
if (mouseUp == true) {
handCards.setVerticalScrollPosition(handCards.getVerticalScrollPosition() - 10);
}
}
});
答案 0 :(得分:1)
Andrei的答案中的第3步假设KeyDownEvent将继续发射。我不确定是不是这样......
另一种方法是使用Down& amp;向上处理程序以启动/停止执行您的操作的重复计时器。然后,您可以根据您希望执行操作的频率设置重复间隔。请记住,这是作为单线程JavaScript运行的,因此如果执行冗长的处理,事情将会变慢,并且计划的时间间隔将不会准时。
Button btn= new Button("Button");
final Timer actionTimer = new Timer() {
@Override
public void run() {
// Your action here
System.out.println("Doing something!");
}
};
btn.addMouseDownHandler(new MouseDownHandler() {
@Override
public void onMouseDown(MouseDownEvent event) {
// Choose the appropriate delay
actionTimer.scheduleRepeating(1000);
}
});
btn.addMouseUpHandler(new MouseUpHandler() {
@Override
public void onMouseUp(MouseUpEvent event) {
actionTimer.cancel();
}
});
答案 1 :(得分:0)
将MouseDownHandler添加到您的小部件中。当它触发时,它应该将标志设置为true,例如mouseDown = true;
将MouseUpHandler添加到您的小部件中。当它触发时,它应该将标志设置为false,例如mouseDown = false;
将KeyDownHandler添加到您的小部件中。如果发生火灾,请检查标志是否为真 - 然后再做一些事情。如果flag为false,则不要这样做。