2016-03-08 81 views
1

在我的Java应用程序中,我使用popupMenuWillBecomeVisible()事件,以决定哪个我的JPopupMenu中的菜单项将被启用/禁用/可见/隐藏了,等是否有办法取消popupMenuWillBecomeVisible()中的弹出菜单?

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

这一切工作正常。我唯一的gotchya是用于列表为空的情况,或者当没有选择项目时触发右键单击。

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

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

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

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

任何人有任何想法?

+2

根据您的需求,您可以只需填写弹出与你的选择,只是禁用它没有一个有效的上下文(而不是添加/删除它们)中的那些,所以在情况下没有选项可用,或者您有一系列禁用的选项 – MadProgrammer

回答

2

SwingUtilities.InvokeLater将等待所有AWT操作在启动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); 
        } 
       }); 
      }