如何在 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 的工作示例部分。
它显示了如何使用 MouseEvent
的 isPopupTrigger()
方法。
或者您可以使用 JComponent
的 setComponentPopupMenu(...)
方法,该方法自 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
}
}
我过去曾多次想知道为什么我的一些 Java/Swing 弹出菜单 似乎在 Linux[ 下工作=18=] 但不在 Windows 之下,反之亦然。那么我该如何实现一个适用于 OS 的弹出菜单呢?
阅读 Swing 教程中关于 Bringing Up a Popup Menu 的工作示例部分。
它显示了如何使用 MouseEvent
的 isPopupTrigger()
方法。
或者您可以使用 JComponent
的 setComponentPopupMenu(...)
方法,该方法自 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
}
}