如何在 Windows 和 Linux 下使用 Swing 实现弹出菜单

How to implement a popup menu in Swing that works both under Windows and Linux

我过去曾多次想知道为什么我的一些 Java/Swing 弹出菜单 似乎在 Linux[ 下工作=18=] 但不在 Windows 之下,反之亦然。那么我该如何实现一个适用于 OS 的弹出菜单呢?

阅读 Swing 教程中关于 Bringing Up a Popup Menu 的工作示例部分。

它显示了如何使用 MouseEventisPopupTrigger() 方法。

或者您可以使用 JComponentsetComponentPopupMenu(...) 方法,该方法自 JDK 1.5 以来一直存在,您不必担心 MouseListener。

在 Windows 中,对 MouseEvent::isPopupTrigger 的调用将在 mouseReleased 方法中正常工作,但从 mousePressed 方法中调用时 returns 始终为 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
    }
}