在检查复选框时如何防止JPopUpMenu消失?

Joo*_*kka 10 swing jpopupmenu jcheckbox

我想JCheckBoxMenuItem在一个中使用s JPopupMenu.它可以工作,但问题是当选中或取消选中复选框项时,弹出菜单会消失.因此,如果想要检查/取消选中多个项目,则需要重复启动弹出窗口,这很烦人.

奇怪的是,如果我只使用JCheckBox菜单中的普通项(而不是JCheckBoxMenuItems),行为就像它应该的那样:弹出窗口停留在那里,可以选中/取消选中复选框.完成后,只需在外部单击即可关闭弹出窗口.

如果有弹出的项目,如何让弹出窗口表现得像JCheckBoxMenuItem?我更喜欢使用JCheckBoxMenuItems,因为它们的外观.

Joo*_*kka 12

好吧,从http://forums.sun.com/thread.jspa?threadID=5432911找到了工作答案.基本上,创建自定义UI:

public class StayOpenCheckBoxMenuItemUI extends BasicCheckBoxMenuItemUI {

   @Override
   protected void doClick(MenuSelectionManager msm) {
      menuItem.doClick(0);
   }

   public static ComponentUI createUI(JComponent c) {
      return new StayOpenCheckBoxMenuItemUI();
   }
}
Run Code Online (Sandbox Code Playgroud)

并将其设置为JCheckBoxMenuItem:

myJCheckBoxMenuItem.setUI(new StayOpenCheckBoxMenuItemUI());
Run Code Online (Sandbox Code Playgroud)

不知道这是否是最优雅的解决方案,但效果很好.