【问题标题】:Using both mouseUp and mouseDoubleClick with menu将 mouseUp 和 mouseDoubleClick 与菜单一起使用
【发布时间】:2020-09-07 03:50:29
【问题描述】:

以下:

    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 触发。

没有将特殊的点击功能移植到我的用户身上,我该如何让它按需要工作?

【问题讨论】:

  • 可能使用Display.timerExec 来暂时延迟显示菜单

标签: java swt


【解决方案1】:
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,所以我的回答无关紧要。我会把它放在这里以防其他人像我一样犯同样的错误。

【讨论】:

  • 问题是关于 SWT,而不是 Swing/AWT。 SWT MouseAdapter 确实有这些方法
【解决方案2】:

好的,所以我补充了:

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

到 mouseUp。它仍然不起作用,除了几乎是偶然的。就好像一旦触发鼠标事件,第二个事件大多被丢弃,但有时会通过。

叹息。

我把鼠标DoubleClick拿出来加了

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

                return;
            }

到mouseUp的顶部,它的好处是至少动作一致。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 2023-03-04
    • 2016-08-24
    • 2011-04-25
    • 2016-03-05
    相关资源
    最近更新 更多