swingjcheckboxjpopupmenu

How to prevent JPopUpMenu disappearing when checking checkboxes in it?


I want to use JCheckBoxMenuItems in a JPopupMenu. It works, but the problem is that the popup menu disappears when a checkbox item has been checked or unchecked. So if one wants to check/uncheck several items, the popup needs to be launched repeatedly, which is irritating.

Curiously, if I use just plain JCheckBox items in the menu (instead of JCheckBoxMenuItems), the behavior is just as it should be: the popup stays there and the checkboxes can be checked/unchecked. Once done, the popup can be closed just by clicking outside it.

How do I make the popup to behave like that when the items there are JCheckBoxMenuItems? I would prefer using JCheckBoxMenuItems because of their looks.


Solution

  • Well, found working answer from http://forums.sun.com/thread.jspa?threadID=5432911. Basically, create a custom UI:

    public class StayOpenCheckBoxMenuItemUI extends BasicCheckBoxMenuItemUI {
    
       @Override
       protected void doClick(MenuSelectionManager msm) {
          menuItem.doClick(0);
       }
    
       public static ComponentUI createUI(JComponent c) {
          return new StayOpenCheckBoxMenuItemUI();
       }
    }
    

    And set it in the JCheckBoxMenuItem:

    myJCheckBoxMenuItem.setUI(new StayOpenCheckBoxMenuItemUI());
    

    Don't know if this is the most elegant possible solution, but works perfectly.