Index: trunk/src/org/openstreetmap/josm/gui/mappaint/BooleanStyleSettingGui.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/BooleanStyleSettingGui.java	(revision 15287)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/BooleanStyleSettingGui.java	(revision 15288)
@@ -4,4 +4,5 @@
 import java.awt.event.ActionEvent;
 import java.util.Arrays;
+import java.util.Objects;
 
 import javax.swing.AbstractAction;
@@ -11,8 +12,10 @@
 
 import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.gui.mappaint.StyleSetting.BooleanStyleSetting;
 import org.openstreetmap.josm.gui.mappaint.loader.MapPaintStyleLoader;
+import org.openstreetmap.josm.gui.util.StayOpenCheckBoxMenuItemUI;
 
 /**
- * GUI elements for a {@link StyleSetting.BooleanStyleSetting} class.
+ * GUI elements for a {@link BooleanStyleSetting} class.
  * @since 12831
  */
@@ -21,6 +24,10 @@
     final StyleSetting.BooleanStyleSetting setting;
 
-    public BooleanStyleSettingGui(StyleSetting.BooleanStyleSetting setting) {
-        this.setting = setting;
+    /**
+     * Constructs a new {@code BooleanStyleSettingGui}.
+     * @param setting boolean style setting
+     */
+    public BooleanStyleSettingGui(BooleanStyleSetting setting) {
+        this.setting = Objects.requireNonNull(setting);
     }
 
@@ -37,4 +44,5 @@
         item.setAction(a);
         item.setSelected((boolean) setting.getValue());
+        item.setUI(new StayOpenCheckBoxMenuItemUI());
         menu.add(item);
     }
Index: trunk/src/org/openstreetmap/josm/gui/util/StayOpenCheckBoxMenuItem.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/util/StayOpenCheckBoxMenuItem.java	(revision 15287)
+++ trunk/src/org/openstreetmap/josm/gui/util/StayOpenCheckBoxMenuItem.java	(revision 15288)
@@ -10,5 +10,5 @@
  * An extension of JCheckBoxMenuItem that doesn't close the menu when selected.
  *
- * @author Darryl https://tips4java.wordpress.com/2010/09/12/keeping-menus-open/
+ * @author Darryl Burke https://tips4java.wordpress.com/2010/09/12/keeping-menus-open/
  */
 public class StayOpenCheckBoxMenuItem extends JCheckBoxMenuItem {
Index: trunk/src/org/openstreetmap/josm/gui/util/StayOpenCheckBoxMenuItemUI.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/util/StayOpenCheckBoxMenuItemUI.java	(revision 15288)
+++ trunk/src/org/openstreetmap/josm/gui/util/StayOpenCheckBoxMenuItemUI.java	(revision 15288)
@@ -0,0 +1,71 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.util;
+
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Rectangle;
+import java.lang.reflect.Method;
+
+import javax.swing.JComponent;
+import javax.swing.JMenuItem;
+import javax.swing.MenuSelectionManager;
+import javax.swing.UIManager;
+import javax.swing.plaf.ComponentUI;
+import javax.swing.plaf.basic.BasicCheckBoxMenuItemUI;
+import javax.swing.plaf.basic.BasicMenuItemUI;
+
+import org.openstreetmap.josm.tools.Logging;
+import org.openstreetmap.josm.tools.ReflectionUtils;
+
+/**
+ * A CheckBoxMenuItem UI delegate that doesn't close the menu when selected.
+ * @author Darryl Burke https://stackoverflow.com/a/3759675/2257172
+ * @since 15288
+ */
+public class StayOpenCheckBoxMenuItemUI extends BasicCheckBoxMenuItemUI {
+
+    @Override
+    protected void doClick(MenuSelectionManager msm) {
+        menuItem.doClick(0);
+    }
+
+    @Override
+    protected void paintBackground(Graphics g, JMenuItem menuItem, Color bgColor) {
+        ComponentUI ui = UIManager.getUI(menuItem);
+        if (ui instanceof BasicMenuItemUI) {
+            try {
+                Method paintBackground = BasicMenuItemUI.class.getDeclaredMethod(
+                        "paintBackground", Graphics.class, JMenuItem.class, Color.class);
+                ReflectionUtils.setObjectsAccessible(paintBackground);
+                paintBackground.invoke(ui, g, menuItem, bgColor);
+            } catch (ReflectiveOperationException | SecurityException | IllegalArgumentException e) {
+                Logging.error(e);
+                super.paintBackground(g, menuItem, bgColor);
+            }
+        } else {
+            super.paintBackground(g, menuItem, bgColor);
+        }
+    }
+
+    @Override
+    protected void paintText(Graphics g, JMenuItem menuItem, Rectangle textRect, String text) {
+        ComponentUI ui = UIManager.getUI(menuItem);
+        if (ui instanceof BasicMenuItemUI) {
+            try {
+                Method paintText = BasicMenuItemUI.class.getDeclaredMethod(
+                        "paintText", Graphics.class, JMenuItem.class, Rectangle.class, String.class);
+                ReflectionUtils.setObjectsAccessible(paintText);
+                paintText.invoke(ui, g, menuItem, textRect, text);
+            } catch (ReflectiveOperationException | SecurityException | IllegalArgumentException e) {
+                Logging.error(e);
+                super.paintText(g, menuItem, textRect, text);
+            }
+        } else {
+            super.paintText(g, menuItem, textRect, text);
+        }
+    }
+
+    public static ComponentUI createUI(JComponent c) {
+        return new StayOpenCheckBoxMenuItemUI();
+    }
+}
