【问题标题】:Block Swing pop-up from losing focus and closing阻止 Swing 弹出窗口失去焦点并关闭
【发布时间】:2020-04-11 17:00:14
【问题描述】:

我正在为 IntelliJ IDEA 开发一个插件,它显然使用了 Swing。
对于我介绍的功能,我想阻止使用 JCheckBoxMenuItems 的 JPopupMenu 失去焦点并关闭。
您可以看到它的实际效果。

我已经调试了代码,但我不知道该怎么做,因为我也不是 那个 喜欢 Swing。
您能否向我指出有用的侦听器/代码块/防止这种情况的方法?

如果你想看代码,IntelliJ 类是

ActionPopupMenuImpl.MyMenu
ActionMenuItem

【问题讨论】:

  • 签出:Keeping Menus Open。您也许可以使用这些类。
  • @camickr 谢谢!我会告诉你。需要试验。
  • @camickr 因为我不能继承 IDEA 类(或者更好的是,我不能更改哪个类被实例化),因此不能覆盖 doClick,也许我可以拦截点击事件通过监听 ButtonModel (setPressed/setArmed) 上的事件。你怎么看?
  • 我不会让 IDE 决定我能做什么或不能做什么。 IDE 应该只用于帮助您调试代码等。它不应该用于生成您的代码。如果您编写自己的代码,则可以完全控制。我没有编写代码,所以我不知道解决方法可能是什么。
  • @camickr 我的意思是我不能继承 IntelliJ IDEA 核心代码,所以我只能通过监听事件来工作

标签: java swing intellij-idea


【解决方案1】:

编辑:需要找到更好的方法,因为 uiRefreshed 事件并不总是在正确的时间被调用。 只需以良好的方式协调您的代码;)


IDEA 中的 Swing 机制太复杂了,或许不去碰它比较好。只需知道鼠标事件由特殊侦听器处理,然后重定向到 Component(s)。

也就是说,按住菜单 ActionButton。您可以通过编程方式监听LookupuiRefreshed 事件:

myMenuButton.click()

就是这样。
您需要在 UI 刷新后调用它,因为 LookupUi 的尺寸或位置可能已更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 2019-12-29
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多