gpt4 book ai didi

java - MouseAdapter 中 isPopupTrigger() 的正确处理是什么

转载 作者:行者123 更新时间:2023-12-02 09:05:54 25 4
gpt4 key购买 nike

我需要编写一个 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() 吗?那么鼠标点击呢?我可以确定两者都 Hook ,但是我是否会冒这样的风险:某些平台有一天会让 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 - MouseAdapter 中 isPopupTrigger() 的正确处理是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59815792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com