java - 有没有办法在 popupMenuWillBecomeVisible() 中取消弹出菜单?

标签 java visibility jpopupmenu

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

我使用 JPopupMenu 作为 JList 的右键单击上下文菜单,并根据右键单击列表中的哪个项目来决定菜单项的状态。

这一切都工作正常。我唯一遇到的问题是列表为空的情况,或者在没有选择任何项目时触发右键单击的情况。

对于这种情况,我希望可以从 popupMenuWillBecomeVisible() 事件中取消 JPopupMenu 的出现,因为这是我当前执行现有测试的地方。

有办法做到这一点吗?也许有某种“消费”事件的方式?

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

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

有人有什么想法吗?

最佳答案

SwingUtilities.InvokeLater 将等到所有 AWT 操作完成后才启动可运行对象,这意味着此可运行对象将在 popupMenuWillBecomeVisible 事件完成且弹出菜单之后调用可见或处于等待绘制的队列中。

        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);
                    }
                });
            }

关于java - 有没有办法在 popupMenuWillBecomeVisible() 中取消弹出菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35856628/

相关文章:

java - 在netbeans中使用视觉 Swing JPopup菜单

java - 带有动态 JPopupMenu 的 JTable

Java GUI 弹出菜单

java - 使用 Spring 的通用子类型的依赖注入(inject)

java - 子类成员变量对另一个子类的可见性

java - 编译程序后如何从源文件夹中获取 jar?

android - 一个视频 View 被另一个视频 View 遮挡

c# - 与列表项的可见性绑定(bind)

java - Android 模拟器、Android Studio 中的“数字”字段中未输入数字时如何显示消息?

java - 模拟中时间管理的静态类