How to prevent JPopUpMenu disappearing when checking checkboxes in it?

一曲冷凌霜 提交于 2019-12-03 03:43:31

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.

I ran into an issue with the nice Joonas Pulakka's answer because the "UIManager lookandFeel" was ignored.

I found the nice trick below on http://tips4java.wordpress.com/2010/09/12/keeping-menus-open/

The point is to reopen immediatly the menu after it has been closed, it's invisible and keep the application look and feel and behavior.

public class StayOpenCBItem extends JCheckBoxMenuItem {

    private static MenuElement[] path;

    {
        getModel().addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent e) {
                if (getModel().isArmed() && isShowing()) {
                    path = MenuSelectionManager.defaultManager().getSelectedPath();
                }
            }
        });
    }

    public StayOpenCBItem(String text) {
        super(text);
    }

    @Override
    public void doClick(int pressTime) {
        super.doClick(pressTime);
        MenuSelectionManager.defaultManager().setSelectedPath(path);
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!