MouseAdapter 中 isPopupTrigger() 的正确处理是什么
what is the correct handling of isPopupTrigger() in MouseAdapter
我需要编写一个 Java Swing 应用程序,它将 运行 并在 Linux、Windows 和 Mac 上执行大致相同的操作。对于我创建的几乎所有小部件,我需要添加一些特殊处理,包括所有内容都需要能够在被询问时弹出菜单。甚至像标签和按钮这样的小部件。
我可以通过添加以下内容来捕获菜单请求:
MouseListener m = new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e)
{
if (e.isPopupTrigger())
{
onMenuSummons(); //do my thing
}
}
};
addMouseListener(m);
我的扩展小部件上的构造函数。
但我担心这是一个仅 Linux 的解决方案。我只需要检查 MousePressed 中的 isPopupEvent() 吗?鼠标点击怎么样?我可以确定两者都挂钩,但是我是否 运行 某天某个平台的 isPopupEvent() 对于相同的鼠标操作在两个函数中都为 true 的风险?
理想情况下,MouseAdapter 会通过提供可覆盖的 popupRequest(MouseEvent e) 来解决我的问题,但事实并非如此。那么什么是永远正确、适用于所有平台、永远永远的解决方案?
此外,我正在扩展的一些小部件可能有自己的弹出菜单;我需要压制那些并实施我自己的。如何确保只显示我自己的菜单? TIA.
阅读 Swing 教程中关于 Bringing up a Popup Menu 的部分,了解使用菜单和弹出菜单的基础知识。
编写 MouseListener 的基本代码是:
class PopupListener extends MouseAdapter {
public void mousePressed(MouseEvent e) {
maybeShowPopup(e);
}
public void mouseReleased(MouseEvent e) {
maybeShowPopup(e);
}
private void maybeShowPopup(MouseEvent e) {
if (e.isPopupTrigger()) {
popup.show(e.getComponent(),
e.getX(), e.getY());
}
}
}
some of the widgets I'm extending may have their own popup menus; I need to suppress those and implement my own.
另请注意教程中的示例较旧。向组件添加弹出菜单的新方法是使用:
component.setComponentPopupMenu(....);
不确定,但由于此方法只允许一个弹出窗口,它可能会替换默认弹出窗口吗?
我需要编写一个 Java Swing 应用程序,它将 运行 并在 Linux、Windows 和 Mac 上执行大致相同的操作。对于我创建的几乎所有小部件,我需要添加一些特殊处理,包括所有内容都需要能够在被询问时弹出菜单。甚至像标签和按钮这样的小部件。
我可以通过添加以下内容来捕获菜单请求:
MouseListener m = new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e)
{
if (e.isPopupTrigger())
{
onMenuSummons(); //do my thing
}
}
};
addMouseListener(m);
我的扩展小部件上的构造函数。
但我担心这是一个仅 Linux 的解决方案。我只需要检查 MousePressed 中的 isPopupEvent() 吗?鼠标点击怎么样?我可以确定两者都挂钩,但是我是否 运行 某天某个平台的 isPopupEvent() 对于相同的鼠标操作在两个函数中都为 true 的风险?
理想情况下,MouseAdapter 会通过提供可覆盖的 popupRequest(MouseEvent e) 来解决我的问题,但事实并非如此。那么什么是永远正确、适用于所有平台、永远永远的解决方案?
此外,我正在扩展的一些小部件可能有自己的弹出菜单;我需要压制那些并实施我自己的。如何确保只显示我自己的菜单? TIA.
阅读 Swing 教程中关于 Bringing up a Popup Menu 的部分,了解使用菜单和弹出菜单的基础知识。
编写 MouseListener 的基本代码是:
class PopupListener extends MouseAdapter {
public void mousePressed(MouseEvent e) {
maybeShowPopup(e);
}
public void mouseReleased(MouseEvent e) {
maybeShowPopup(e);
}
private void maybeShowPopup(MouseEvent e) {
if (e.isPopupTrigger()) {
popup.show(e.getComponent(),
e.getX(), e.getY());
}
}
}
some of the widgets I'm extending may have their own popup menus; I need to suppress those and implement my own.
另请注意教程中的示例较旧。向组件添加弹出菜单的新方法是使用:
component.setComponentPopupMenu(....);
不确定,但由于此方法只允许一个弹出窗口,它可能会替换默认弹出窗口吗?