在我的 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/