Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java	(revision 15591)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java	(revision 15592)
@@ -39,7 +39,9 @@
 
 import org.openstreetmap.josm.actions.ExpertToggleAction;
+import org.openstreetmap.josm.actions.ExpertToggleAction.ExpertModeChangeListener;
 import org.openstreetmap.josm.actions.MergeLayerAction;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.imagery.OffsetBookmark;
+import org.openstreetmap.josm.data.preferences.AbstractProperty.ValueChangeEvent;
 import org.openstreetmap.josm.data.preferences.AbstractProperty.ValueChangeListener;
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
@@ -130,5 +132,5 @@
     /** the list of layers (technically its a JTable, but appears like a list) */
     private final LayerList layerList;
-    private final ValueChangeListener<? super Boolean> displayNumbersPrefListener;
+    private final ColumnWidthAdaptionListener visibilityWidthListener;
 
     private final ActivateLayerAction activateLayerAction;
@@ -223,9 +225,6 @@
         layerList.getColumnModel().getColumn(2).setResizable(false);
 
-        int width = getLayerNumberWidth();
         layerList.getColumnModel().getColumn(3).setCellRenderer(new LayerVisibleCellRenderer());
         layerList.getColumnModel().getColumn(3).setCellEditor(new LayerVisibleCellEditor(new LayerVisibleCheckBox()));
-        layerList.getColumnModel().getColumn(3).setMaxWidth(width);
-        layerList.getColumnModel().getColumn(3).setPreferredWidth(width);
         layerList.getColumnModel().getColumn(3).setResizable(false);
 
@@ -252,11 +251,9 @@
         }
 
-        displayNumbersPrefListener = change -> {
-            int numberWidth = getLayerNumberWidth();
-            layerList.getColumnModel().getColumn(3).setMaxWidth(numberWidth);
-            layerList.getColumnModel().getColumn(3).setPreferredWidth(numberWidth);
-            repaint();
-        };
-        DISPLAY_NUMBERS.addListener(displayNumbersPrefListener);
+        visibilityWidthListener = new ColumnWidthAdaptionListener(3, 16);
+        DISPLAY_NUMBERS.addListener(visibilityWidthListener);
+        ExpertToggleAction.addExpertModeChangeListener(visibilityWidthListener);
+        layerManager.addLayerChangeListener(visibilityWidthListener);
+        visibilityWidthListener.updateColumnWidth();
 
         // init the model
@@ -343,8 +340,4 @@
     }
 
-    private static int getLayerNumberWidth() {
-        return displayLayerNumbers() ? 48 : 16;
-    }
-
     /**
      * Gets the layer manager this dialog is for.
@@ -388,5 +381,7 @@
         JumpToMarkerActions.unregisterActions();
         layerList.setTransferHandler(null);
-        DISPLAY_NUMBERS.removeListener(displayNumbersPrefListener);
+        DISPLAY_NUMBERS.removeListener(visibilityWidthListener);
+        ExpertToggleAction.removeExpertModeChangeListener(visibilityWidthListener);
+        layerManager.removeLayerChangeListener(visibilityWidthListener);
         super.destroy();
         instance = null;
@@ -395,4 +390,51 @@
     static ImageIcon createBlankIcon() {
         return ImageProvider.createBlankIcon(ImageSizes.LAYER);
+    }
+
+    private class ColumnWidthAdaptionListener implements ValueChangeListener<Boolean>, ExpertModeChangeListener, LayerChangeListener {
+        private final int minWidth;
+        private final int column;
+
+        ColumnWidthAdaptionListener(int column, int minWidth) {
+            this.column = column;
+            this.minWidth = minWidth;
+        }
+
+        @Override
+        public void expertChanged(boolean isExpert) {
+            updateColumnWidth();
+        }
+
+        @Override
+        public void valueChanged(ValueChangeEvent<? extends Boolean> e) {
+            updateColumnWidth();
+        }
+
+        @Override
+        public void layerAdded(LayerAddEvent e) {
+            updateColumnWidth();
+        }
+
+        @Override
+        public void layerRemoving(LayerRemoveEvent e) {
+            updateColumnWidth();
+        }
+
+        @Override
+        public void layerOrderChanged(LayerOrderChangeEvent e) {
+            //not needed
+        }
+
+        public void updateColumnWidth() {
+            int width = minWidth;
+            for (int row = 0; row < layerList.getRowCount(); row++) {
+                TableCellRenderer renderer = layerList.getCellRenderer(row, column);
+                Component comp = layerList.prepareRenderer(renderer, row, column);
+                width = Math.max(comp.getPreferredSize().width + 1, width);
+            }
+            layerList.getColumnModel().getColumn(column).setMaxWidth(width);
+            layerList.getColumnModel().getColumn(column).setPreferredWidth(width);
+            repaint();
+        }
     }
 
@@ -419,5 +461,4 @@
          */
         LayerVisibleCheckBox() {
-            setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
             iconEye = ImageProvider.get("dialogs/layerlist", "eye");
             iconEyeTranslucent = ImageProvider.get("dialogs/layerlist", "eye-translucent");
