Java 如何在Swing中实现同时在Windows和Linux下工作的弹出菜单

Java 如何在Swing中实现同时在Windows和Linux下工作的弹出菜单,java,swing,mouseevent,popupmenu,Java,Swing,Mouseevent,Popupmenu,在过去的几年里,我一直在想,为什么我的一些Java/Swing弹出菜单似乎在Linux下工作,但在Windows下却不工作,反之亦然。那么,我如何实现一个在两个操作系统上都能工作的弹出菜单呢?阅读Swing教程中的部分,了解工作示例 它显示了如何使用MouseEvent的isPopupTrigger()方法 或者您可以使用JComponent的setComponentPopupMenu(…)方法,该方法自JDK1.5以来就一直存在,您不必担心鼠标听筒。阅读Swing教程中的部分,了解工作示例 它

在过去的几年里,我一直在想,为什么我的一些Java/Swing弹出菜单似乎在Linux下工作,但在Windows下却不工作,反之亦然。那么,我如何实现一个在两个操作系统上都能工作的弹出菜单呢?

阅读Swing教程中的部分,了解工作示例

它显示了如何使用
MouseEvent
isPopupTrigger()
方法


或者您可以使用JComponent的
setComponentPopupMenu(…)
方法,该方法自JDK1.5以来就一直存在,您不必担心鼠标听筒。

阅读Swing教程中的部分,了解工作示例

它显示了如何使用
MouseEvent
isPopupTrigger()
方法


或者你可以使用JComponent的
setComponentPopupMenu(…)
方法,这种方法从JDK 1.5开始就存在了,你不必担心鼠标听写器。

在Windows中,调用MouseeEvent::isPopupTrigger在mouseReleased方法中可以正常工作,但是从mousePressed方法中调用时总是返回false。在Linux中,情况正好相反

@Override
public void mousePressed(MouseEvent e)
{
    checkPopup(e); // triggers the popup event under Linux but not under Windows
}

@Override
public void mouseReleased(MouseEvent e)
{
    checkPopup(e); // triggers the popup event under Windows but not under Linux
}

private void checkPopup(MouseEvent e)
{
    if (e.isPopupTrigger())
    {
        // do something
    }
}

在Windows中,对MouseeEvent::isPopupTrigger的调用在mouseReleased方法中可以正常工作,但从mousePressed方法中调用时始终返回false。在Linux中,情况正好相反

@Override
public void mousePressed(MouseEvent e)
{
    checkPopup(e); // triggers the popup event under Linux but not under Windows
}

@Override
public void mouseReleased(MouseEvent e)
{
    checkPopup(e); // triggers the popup event under Windows but not under Linux
}

private void checkPopup(MouseEvent e)
{
    if (e.isPopupTrigger())
    {
        // do something
    }
}

正如@camickr提供的链接所提到的,重要的不是操作系统,而是您正在使用的LAF。正如@camickr提供的链接所提到的,重要的不是操作系统,而是您正在使用的LAF。