有没有办法取消 popupMenuWillBecomeVisible() 中的弹出菜单?
Is there a way to cancel the popup menu within popupMenuWillBecomeVisible()?
在我的 java 应用程序中,我一直在使用 popupMenuWillBecomeVisible() 事件来决定我的 JPopupMenu 中的哪些菜单项 enabled/disabled/visible/hidden,等等
我将 JPopupMenu 用作 JList 的右键单击上下文菜单,我根据右键单击列表中的项目来决定菜单项的状态。
一切正常。我遇到的唯一问题是列表为空的情况,或者在没有选择任何项目时触发了右键单击。
对于这种情况,我希望我可以从 popupMenuWillBecomeVisible() 事件中取消 JPopupMenu 的出现,因为这是我目前执行现有测试的地方。
有办法吗?也许某种方式 'consume' 事件?
如果没有,也许我唯一的其他选择是尝试其他选择,例如在右键单击之前将测试逻辑移到其他地方。
不过,在这个阶段我的偏好是将逻辑保留在 popupMenuWillBecomeVisible() 中,除非事实证明这是不可能的。
有人有什么想法吗?
SwingUtilities.InvokeLater
将等到所有 AWT 操作完成后再启动 runnable,这意味着此 runnable 将在 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() 事件来决定我的 JPopupMenu 中的哪些菜单项 enabled/disabled/visible/hidden,等等
我将 JPopupMenu 用作 JList 的右键单击上下文菜单,我根据右键单击列表中的项目来决定菜单项的状态。
一切正常。我遇到的唯一问题是列表为空的情况,或者在没有选择任何项目时触发了右键单击。
对于这种情况,我希望我可以从 popupMenuWillBecomeVisible() 事件中取消 JPopupMenu 的出现,因为这是我目前执行现有测试的地方。
有办法吗?也许某种方式 'consume' 事件?
如果没有,也许我唯一的其他选择是尝试其他选择,例如在右键单击之前将测试逻辑移到其他地方。
不过,在这个阶段我的偏好是将逻辑保留在 popupMenuWillBecomeVisible() 中,除非事实证明这是不可能的。
有人有什么想法吗?
SwingUtilities.InvokeLater
将等到所有 AWT 操作完成后再启动 runnable,这意味着此 runnable 将在 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);
}
});
}