在菜单上同时使用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触发。

将特殊点击功能嫁接到我的用户上的次数太少了,我如何才能使其按需工作?

解决方法

1.我发现您覆盖mouseDoubleClick和mouseUp很奇怪,因为它们不是MouseAdapter的方法。除非您使用的库不同,否则使用`java.awt.event`。
  1. 如果您只想在双击时激活一个动作(而不触发一个单击动作),通常的想法是您需要设置一个计时器来延迟触发事件。

以下链接中已经讨论了这个问题,您可以看看它们:

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的顶部,这样做的好处是至少可以始终如一地进行操作。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...