使用mouseup和mousedoubleclick with menu

iyfamqjs  于 2021-07-04  发布在  Java
关注(0)|答案(2)|浏览(295)

对于以下各项:

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事件触发。这将打开弹出菜单。菜单将自身定位在鼠标指针下,因此双击不会注册为第二次单击现在被菜单吸收。如果我动作很快,只需轻轻地抽动一下鼠标,我有时就可以让鼠标上的鼠标点着。
除了将特殊的点击功能移植到我的用户上,我怎样才能让它按预期工作?

vs3odd8k

vs3odd8k1#

好吧,我补充说:

synchronized (this)
            {
                try
                {
                    wait( Display.getCurrent().getDoubleClickTime() );
                }
                catch (InterruptedException e1)
                {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }

给老鼠。它仍然不起作用,除了几乎是偶然的。这就好像一旦鼠标事件被触发,第二个事件大部分被丢弃,但有时会通过。
叹气。
我拿出鼠标垫,加了一句

if ((e.stateMask & SWT.CTRL) != 0)
            {
                startCameraViewer( ivCamera );

                return;
            }

到鼠标顶端,这至少有一个好处是行动一致。

zpgglvta

zpgglvta2#

1.我觉得你重写mousedoubleclick和mouseup很奇怪,因为它们不是mouseadapter的方法。除非您使用的库与“java.awt.event”不同。
如果您只想在双击时激活一个操作(而不触发一键操作),一般的想法是您需要设置一个计时器来延迟触发事件。
这个问题已经在下面的链接中讨论过了,您可以查看一下:
java:检测三次点击而不触发双击
在java中区分单击和双击
编辑:似乎您正在使用 SWT ,不是 AWT 所以我的答案无关紧要。我会把这个放在这里,以防万一有人和我一样犯同样的错误。

相关问题