有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Linux中的Java弹出触发器

我有一个应用程序,你可以做一个鼠标右键按下和拖动(以及左键按下和拖动不同的操作)。然而,在linux上运行时,弹出菜单似乎是由鼠标按下而不是鼠标按下触发的。这导致每次我按下鼠标右键进行拖动时,弹出菜单都会被触发(与windows不同,在windows中,它是鼠标松开的)

有没有想过如何解决这个问题

谢谢

编辑:发布代码

弹出菜单代码

// this is called from mousePressed and mouseReleased
if (e.isPopupTrigger() && !e.isConsumed()) {
    // show the popup menu
}

这段代码被称为鼠标右键按下/拖动(这是第三方代码,但它是开源的,所以我可以根据需要进行更改)

// this is called on all mouse events
if (buttonAction.mouseButton != 0)
{
    // handle the event
}

共 (3) 个答案

  1. # 1 楼答案

    MouseEvent。isPopupTrigger()。返回此鼠标事件是否为平台的弹出菜单触发事件

    编辑-:您需要同时签入linux的mousePressed和windows的MouseRelease

  2. # 2 楼答案

    我认为正确的程序应该是统一显示弹出窗口的位置和时间。作为拖动事件(如果存在),在按下事件之后,您应该避免在按下事件中写入显示弹出窗口的逻辑(然后在按下事件中写入显示弹出窗口的逻辑)。一些用户在按住弹出按钮的同时浏览弹出窗口,感觉很好,而另一些用户只是不在乎或不知道。但在您的情况下,如果不添加额外代码,您将无法在拖动时导航弹出菜单

    我的方法是管理逻辑,在发布事件中始终显示弹出窗口。在拖动后输入一个释放事件应该有足够的信息来知道弹出窗口不应该可见。当然,如果可以更改和修改源代码,则始终如此

  3. # 3 楼答案

    是的,使用isPopupTrigger(),如图here

    增编:

    it appears isPopupTrigger is triggered on mousePressed in linux.

    是的,在Mac OS X上也是一样的。你必须同时从mousePressed()mouseReleased()调用isPopupTrigger()。在^{}中有一个相关的例子