如何解决在菜单上同时使用mouseUp和mouseDoubleClick
针对以下内容:
private class LabelViewMouseListener extends MouseAdapter
{
private Camera ivCamera;
private LabelViewMouseListener( Camera camera )
{
ivCamera = camera;
}
@Override
public void mouseDoubleClick( MouseEvent e )
{
startCameraViewer( ivCamera );
}
@Override
public void mouseUp( MouseEvent e )
{
ivCamera.getPopupMenu().setVisible( true );
}
}
想法是单击即可获得菜单,而双击可启动查看器。
当鼠标“单击”时,将触发mouseUp事件。这将弹出弹出菜单。菜单将自身定位在鼠标指针的下方,因此双击不会注册,因为菜单现在吸收了第二次单击。如果我非常快,只是抽动了一下鼠标,有时可以使mouseDoubleClick触发。
将特殊点击功能嫁接到我的用户上的次数太少了,我如何才能使其按需工作?
解决方法
- 如果您只想在双击时激活一个动作(而不触发一个单击动作),通常的想法是您需要设置一个计时器来延迟触发事件。
以下链接中已经讨论了这个问题,您可以看看它们:
Java : detect triple-click without firing double-click
Distinguish between a single click and a double click in Java
编辑:看来您使用的是SWT
,而不是AWT
,所以我的回答与之无关。我将把它放在这里,以防其他人像我一样犯同样的错误。
好,所以我添加了:
synchronized (this)
{
try
{
wait( Display.getCurrent().getDoubleClickTime() );
}
catch (InterruptedException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
到mouseUp。它仍然不起作用,除非几乎是偶然的。好像一旦触发了鼠标事件,第二个事件通常会被丢弃,但有时会成功。
叹气。
我拿出mouseDoubleClick并添加了
if ((e.stateMask & SWT.CTRL) != 0)
{
startCameraViewer( ivCamera );
return;
}
在mouseUp的顶部,这样做的好处是至少可以始终如一地进行操作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。