Eclipse 如何接受触摸事件和鼠标事件来检测控件何时被单击?

Eclipse 如何接受触摸事件和鼠标事件来检测控件何时被单击?,eclipse,swt,Eclipse,Swt,我已经做了一个虚拟键盘,它在使用鼠标时工作得很好。然而,我很难让它在触摸屏上正常工作 对于正常操作,它工作正常。我按下屏幕并释放。这将引发一个MouseDown事件,然后引发一个MouseUp事件。这没关系 然后我想在一个按键上添加一个弹出窗口,按下并按住500毫秒可以触发该按键。使用鼠标时,这不是问题,但我现在看到,由触摸触发的鼠标事件仅在释放触摸后引发。延迟后不可能触发弹出窗口 接下来,我在虚拟按键中添加了TouchListeners,并认为问题已经解决,直到我意识到鼠标事件仍然会引发,导致

我已经做了一个虚拟键盘,它在使用鼠标时工作得很好。然而,我很难让它在触摸屏上正常工作

对于正常操作,它工作正常。我按下屏幕并释放。这将引发一个
MouseDown
事件,然后引发一个
MouseUp
事件。这没关系

然后我想在一个按键上添加一个弹出窗口,按下并按住500毫秒可以触发该按键。使用鼠标时,这不是问题,但我现在看到,由触摸触发的鼠标事件仅在释放触摸后引发。延迟后不可能触发弹出窗口

接下来,我在虚拟按键中添加了
TouchListener
s,并认为问题已经解决,直到我意识到鼠标事件仍然会引发,导致两次“按键”按下,一次是触摸,另一次是鼠标

我想保持这两个选项打开,以便可以使用触摸屏或鼠标。因此,我的问题是:如果我已经使用
TouchListener
处理了事件,如何防止引发鼠标事件

(在Windows 10上使用eclipse开普勒和Java7)


我认为这将是最容易处理在更高的水平,作为一个去盎司。如果在很短的时间内从一个键获得两个onKeyUp()事件,请忽略第二个。(使用Event.time字段,而不是处理事件的时间)

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);