Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java	(revision 15631)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java	(revision 15632)
@@ -4,8 +4,12 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.awt.Color;
 import java.awt.Component;
 import java.awt.Dimension;
 import java.awt.Font;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
 import java.awt.GraphicsEnvironment;
+import java.awt.RenderingHints;
 import java.awt.event.ActionEvent;
 import java.awt.event.InputEvent;
@@ -17,5 +21,4 @@
 import java.util.Arrays;
 import java.util.List;
-import java.util.Optional;
 import java.util.concurrent.CopyOnWriteArrayList;
 
@@ -456,4 +459,5 @@
         private final ImageIcon iconEyeTranslucent;
         private boolean isTranslucent;
+        private Layer layer;
 
         /**
@@ -461,8 +465,8 @@
          */
         LayerVisibleCheckBox() {
-            iconEye = ImageProvider.get("dialogs/layerlist", "eye");
-            iconEyeTranslucent = ImageProvider.get("dialogs/layerlist", "eye-translucent");
+            iconEye = new EyeIcon("eye");
+            iconEyeTranslucent = new EyeIcon("eye-translucent", true);
             setIcon(ImageProvider.get("dialogs/layerlist", "eye-off"));
-            setPressedIcon(ImageProvider.get("dialogs/layerlist", "eye-pressed"));
+            setPressedIcon(new EyeIcon("eye-pressed"));
             setSelectedIcon(iconEye);
             isTranslucent = false;
@@ -480,4 +484,5 @@
 
         public void updateStatus(Layer layer) {
+            this.layer = layer;
             boolean visible = layer.isVisible();
             setSelected(visible);
@@ -493,4 +498,35 @@
                 tr("layer is currently visible (click to hide layer)") :
                 tr("layer is currently hidden (click to show layer)"));
+        }
+
+        private class EyeIcon extends ImageIcon {
+            private final boolean translucent;
+
+            EyeIcon(String name) {
+                this(name, false);
+            }
+
+            EyeIcon(String name, boolean translucent) {
+                super(ImageProvider.get("dialogs/layerlist", name).getImage());
+                this.translucent = translucent;
+            }
+
+            @Override
+            public synchronized void paintIcon(Component comp, Graphics g, int x, int y) {
+                Color c;
+                if (Config.getPref().getBoolean("dialog.layer.colorname", true)
+                        && layer != null && (c = layer.getColor()) != null) {
+                    if (g instanceof Graphics2D) {
+                        ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+                    }
+                    if (translucent) {
+                        g.setColor(new Color(c.getRed(), c.getGreen(), c.getBlue(), 125));
+                    } else {
+                        g.setColor(c);
+                    }
+                    g.fillOval(x, y + 1, getIconWidth(), getIconHeight() - 2);
+                }
+                super.paintIcon(comp, g, x, y);
+            }
         }
     }
@@ -649,9 +685,4 @@
             if (isActiveLayer(layer)) {
                 label.setFont(label.getFont().deriveFont(Font.BOLD));
-            }
-            if (Config.getPref().getBoolean("dialog.layer.colorname", true)) {
-                label.setForeground(Optional
-                        .ofNullable(layer.getColor())
-                        .orElse(UIManager.getColor(isSelected ? "Table.selectionForeground" : "Table.foreground")));
             }
             label.setIcon(layer.getIcon());
