我制作了一个虚拟键盘,使用鼠标时效果很好。但是,我很难让它在触摸屏上正常工作。
对于正常操作,它可以正常工作。我按下屏幕并释放。这会引发MouseDown
事件,然后发生MouseUp
事件。没关系。
然后我想在一个按键上添加一个弹出按钮,通过按住500ms来触发该按键。使用鼠标这不是问题,但我现在看到触摸触发的鼠标事件仅在触发释放后上升。延迟后不可能触发弹出窗口。
接下来,我将TouchListener
添加到虚拟键中,并认为问题已解决,直到我意识到鼠标事件仍然被提升导致2'键'按下 - 一个来自触摸,一个来自鼠标。
我想保持两个选项都打开,以便可以使用触摸屏或鼠标。所以我的问题是:如果我已经使用TouchListener
处理了事件,如何防止引发鼠标事件?
(在Windows 10上使用带有Java7的eclipse kepler)
TouchListener touchListener = new TouchListener() {
boolean down = false;
@Override
public void touch(TouchEvent e) {
for (Touch t : e.touches) {
if(t.primary) {
if((t.state & SWT.TOUCHSTATE_DOWN) == SWT.TOUCHSTATE_DOWN) {
if(!down) {
down = true;
onKeyDown();
}
}
if((t.state & SWT.TOUCHSTATE_UP) == SWT.TOUCHSTATE_UP) {
if(down) {
down = false;
onKeyUp();
}
}
}
}
}
};
MouseAdapter mouseListener = new MouseAdapter() {
@Override
public void mouseDown(MouseEvent e) {
onKeyDown();
}
@Override
public void mouseUp(MouseEvent e) {
onKeyUp();
}
};
Label myKey = new Label(panel, 0);
myKey.setTouchEnabled(true);
myKey.addMouseListener(mouseListener);
myKey.addTouchListener(touchListener);
答案 0 :(得分:0)
我认为最高处理这个问题是最容易的,作为去抖动。如果您在很短的时间内从一个键获得两个onKeyUp()事件,请忽略第二个。 (使用Event.time字段而不是处理事件的时间)