在我的java应用程序中,我一直在使用 popupMenuWillBecomeVisible()事件来决定我的JPopupMenu中的哪些菜单项将被启用/禁用/可见/隐藏等。< / p>
我已经使用JPopupMenu作为JList的右键单击上下文菜单,我决定菜单项的状态,具体取决于右键单击列表中的哪个项目。
这一切都很好。我唯一的gotchya用于列表为空的情况,或者在没有选择项目时触发右键单击。
对于这种情况,我希望我可以在 popupMenuWillBecomeVisible()事件中取消JPopupMenu的外观,就像我当前执行现有测试的那样。
有办法做到这一点吗?也许某种方式消费&#39;事件?
如果没有,也许我唯一的另一个选择是尝试替代方案,例如在右键单击之前将测试逻辑移到其他地方。
尽管如此,我在这个阶段的偏好是将逻辑保持在popupMenuWillBecomeVisible()中,除非事实证明这是不可能的。
有人有任何想法吗?
答案 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);
}
});
}