有没有办法取消popupMenuWillBecomeVisible()中的弹出菜单?

时间:2016-03-08 00:10:58

标签: java visibility jpopupmenu

在我的java应用程序中,我一直在使用 popupMenuWillBecomeVisible()事件来决定我的JPopupMenu中的哪些菜单项将被启用/禁用/可见/隐藏等。< / p>

我已经使用JPopupMenu作为JList的右键单击上下文菜单,我决定菜单项的状态,具体取决于右键单击列表中的哪个项目。

这一切都很好。我唯一的gotchya用于列表为空的情况,或者在没有选择项目时触发右键单击。

对于这种情况,我希望我可以在 popupMenuWillBecomeVisible()事件中取消JPopupMenu的外观,就像我当前执行现有测试的那样。

有办法做到这一点吗?也许某种方式消费&#39;事件?

如果没有,也许我唯一的另一个选择是尝试替代方案,例如在右键单击之前将测试逻辑移到其他地方。

尽管如此,我在这个阶段的偏好是将逻辑保持在popupMenuWillBecomeVisible()中,除非事实证明这是不可能的。

有人有任何想法吗?

1 个答案:

答案 0 :(得分:2)

SwingUtilities.InvokeLater将等到所有AWT操作完成后再启动runnable,这意味着在popupMenuWillBecomeVisible事件完成后弹出菜单可见或在队列中被绘制时将调用此runnable

        final JPopupMenu popupMenu = new JPopupMenu();
        popupMenu.addPopupMenuListener(new PopupMenuListener() {
            @Override
            public void popupMenuWillBecomeVisible(final PopupMenuEvent e) {
                SwingUtilities.invokeLater(new Runnable() {
                    @Override
                    public void run() {
                        ((JPopupMenu)e.getSource()).setVisible(false);
                    }
                });
            }