Index: trunk/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java	(revision 16593)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java	(revision 16594)
@@ -54,4 +54,5 @@
 import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
 import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.gui.widgets.FilterField;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.ColorHelper;
@@ -138,4 +139,9 @@
                     info.getName(), info.getDefaultValue());
         }
+
+        @Override
+        public String toString() {
+            return "ColorEntry{" + getDisplay() + ' ' + ColorHelper.color2html(getDisplayColor()) + '}';
+        }
     }
 
@@ -259,4 +265,5 @@
         colorEdit.addActionListener(e -> {
             int sel = colors.getSelectedRow();
+            sel = colors.convertRowIndexToModel(sel);
             ColorEntry ce = tableModel.getEntry(sel);
             JColorChooser chooser = new JColorChooser(ce.getDisplayColor());
@@ -273,4 +280,5 @@
         defaultSet.addActionListener(e -> {
             int sel = colors.getSelectedRow();
+            sel = colors.convertRowIndexToModel(sel);
             ColorEntry ce = tableModel.getEntry(sel);
             Color c = ce.info.getDefaultValue();
@@ -293,4 +301,5 @@
         remove.addActionListener(e -> {
             int sel = colors.getSelectedRow();
+            sel = colors.convertRowIndexToModel(sel);
             tableModel.removeEntry(sel);
         });
@@ -300,4 +309,6 @@
 
         colors = new JTable(tableModel);
+        colors.setAutoCreateRowSorter(true);
+        FilterField colorFilter = new FilterField().filter(colors, tableModel);
         colors.addMouseListener(new MouseAdapter() {
             @Override
@@ -353,4 +364,5 @@
         JPanel panel = new JPanel(new GridBagLayout());
         panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+        panel.add(colorFilter, GBC.eol().fill(GBC.HORIZONTAL));
         JScrollPane scrollpane = new JScrollPane(colors);
         scrollpane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
@@ -425,5 +437,9 @@
     private void updateEnabledState() {
         int sel = colors.getSelectedRow();
-        ColorEntry ce = sel >= 0 && sel < tableModel.getRowCount() ? tableModel.getEntry(sel) : null;
+        if (sel < 0 || sel >= tableModel.getRowCount()) {
+            return;
+        }
+        sel = colors.convertRowIndexToModel(sel);
+        ColorEntry ce = tableModel.getEntry(sel);
         remove.setEnabled(ce != null && isRemoveColor(ce));
         colorEdit.setEnabled(ce != null);
