Index: trunk/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java	(revision 17712)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java	(revision 17713)
@@ -62,6 +62,4 @@
 import javax.swing.event.CellEditorListener;
 import javax.swing.event.ChangeEvent;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
 import javax.swing.event.ListSelectionEvent;
 import javax.swing.event.ListSelectionListener;
@@ -86,4 +84,5 @@
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
+import org.openstreetmap.josm.gui.util.DocumentAdapter;
 import org.openstreetmap.josm.gui.util.FileFilterAllFiles;
 import org.openstreetmap.josm.gui.util.GuiHelper;
@@ -831,20 +830,5 @@
 
             // Make OK button enabled only when a file/URL has been set
-            tfURL.getDocument().addDocumentListener(new DocumentListener() {
-                @Override
-                public void insertUpdate(DocumentEvent e) {
-                    updateOkButtonState();
-                }
-
-                @Override
-                public void removeUpdate(DocumentEvent e) {
-                    updateOkButtonState();
-                }
-
-                @Override
-                public void changedUpdate(DocumentEvent e) {
-                    updateOkButtonState();
-                }
-            });
+            tfURL.getDocument().addDocumentListener(DocumentAdapter.create(ignore -> updateOkButtonState()));
         }
 
Index: trunk/src/org/openstreetmap/josm/gui/preferences/advanced/AdvancedPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/advanced/AdvancedPreference.java	(revision 17712)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/advanced/AdvancedPreference.java	(revision 17713)
@@ -33,6 +33,4 @@
 import javax.swing.JPopupMenu;
 import javax.swing.JScrollPane;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
 import javax.swing.event.MenuEvent;
 import javax.swing.event.MenuListener;
@@ -53,4 +51,5 @@
 import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
+import org.openstreetmap.josm.gui.util.DocumentAdapter;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.AbstractFileChooser;
@@ -174,24 +173,5 @@
         txtFilterPanel.add(lbFilter, GBC.std().insets(0, 0, 5, 0));
         txtFilterPanel.add(txtFilter, GBC.eol().fill(GBC.HORIZONTAL));
-        txtFilter.getDocument().addDocumentListener(new DocumentListener() {
-            @Override
-            public void changedUpdate(DocumentEvent e) {
-                action();
-            }
-
-            @Override
-            public void insertUpdate(DocumentEvent e) {
-                action();
-            }
-
-            @Override
-            public void removeUpdate(DocumentEvent e) {
-                action();
-            }
-
-            private void action() {
-                applyFilter();
-            }
-        });
+        txtFilter.getDocument().addDocumentListener(DocumentAdapter.create(ignore -> applyFilter()));
         readPreferences(Preferences.main());
 
Index: trunk/src/org/openstreetmap/josm/gui/preferences/imagery/AddImageryPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/imagery/AddImageryPanel.java	(revision 17712)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/imagery/AddImageryPanel.java	(revision 17713)
@@ -21,6 +21,4 @@
 import javax.swing.JSpinner;
 import javax.swing.SpinnerNumberModel;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
 import javax.swing.text.JTextComponent;
 
@@ -29,4 +27,5 @@
 import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryType;
 import org.openstreetmap.josm.data.imagery.TMSCachedTileLoaderJob;
+import org.openstreetmap.josm.gui.util.DocumentAdapter;
 import org.openstreetmap.josm.gui.widgets.JosmTextArea;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
@@ -138,20 +137,5 @@
 
     protected final void registerValidableComponent(JTextComponent component) {
-        component.getDocument().addDocumentListener(new DocumentListener() {
-            @Override
-            public void removeUpdate(DocumentEvent e) {
-                notifyListeners();
-            }
-
-            @Override
-            public void insertUpdate(DocumentEvent e) {
-                notifyListeners();
-            }
-
-            @Override
-            public void changedUpdate(DocumentEvent e) {
-                notifyListeners();
-            }
-        });
+        component.getDocument().addDocumentListener(DocumentAdapter.create(ignore -> notifyListeners()));
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/Text.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/Text.java	(revision 17712)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/Text.java	(revision 17713)
@@ -22,6 +22,4 @@
 import javax.swing.JPanel;
 import javax.swing.JToggleButton;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
 
 import org.openstreetmap.josm.data.osm.Tag;
@@ -30,4 +28,5 @@
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetItem;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetItemGuiSupport;
+import org.openstreetmap.josm.gui.util.DocumentAdapter;
 import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
@@ -250,20 +249,6 @@
 
     private void setupListeners(AutoCompletingTextField textField, TaggingPresetItemGuiSupport support) {
-        textField.getDocument().addDocumentListener(new DocumentListener() {
-            @Override
-            public void insertUpdate(DocumentEvent e) {
-                support.fireItemValueModified(Text.this, key, textField.getText());
-            }
-
-            @Override
-            public void removeUpdate(DocumentEvent e) {
-                support.fireItemValueModified(Text.this, key, textField.getText());
-            }
-
-            @Override
-            public void changedUpdate(DocumentEvent e) {
-                support.fireItemValueModified(Text.this, key, textField.getText());
-            }
-        });
+        textField.getDocument().addDocumentListener(DocumentAdapter.create(ignore ->
+                support.fireItemValueModified(Text.this, key, textField.getText())));
 
         if (valueTemplate != null) {
Index: trunk/src/org/openstreetmap/josm/gui/util/DocumentAdapter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/util/DocumentAdapter.java	(revision 17713)
+++ trunk/src/org/openstreetmap/josm/gui/util/DocumentAdapter.java	(revision 17713)
@@ -0,0 +1,43 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.util;
+
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+
+/**
+ * A functional DocumentListener which sends all events to {@link #update(DocumentEvent)}.
+ */
+@FunctionalInterface
+public interface DocumentAdapter extends DocumentListener {
+
+    /**
+     * Gives notification that there was an event.
+     *
+     * @param e the document event
+     */
+    void update(DocumentEvent e);
+
+    @Override
+    default void insertUpdate(DocumentEvent e) {
+        update(e);
+    }
+
+    @Override
+    default void removeUpdate(DocumentEvent e) {
+        update(e);
+    }
+
+    @Override
+    default void changedUpdate(DocumentEvent e) {
+        update(e);
+    }
+
+    /**
+     * Utility function to create an adapter from a lambda expression
+     * @param adapter the adapter
+     * @return {@code adapter}
+     */
+    static DocumentAdapter create(DocumentAdapter adapter) {
+        return adapter;
+    }
+}
Index: trunk/src/org/openstreetmap/josm/gui/widgets/SearchTextResultListPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/widgets/SearchTextResultListPanel.java	(revision 17712)
+++ trunk/src/org/openstreetmap/josm/gui/widgets/SearchTextResultListPanel.java	(revision 17713)
@@ -1,4 +1,6 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.widgets;
+
+import org.openstreetmap.josm.gui.util.DocumentAdapter;
 
 import java.awt.BorderLayout;
@@ -16,6 +18,4 @@
 import javax.swing.JScrollPane;
 import javax.swing.ListSelectionModel;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
 import javax.swing.event.ListSelectionListener;
 
@@ -44,20 +44,5 @@
 
         edSearchText = new JosmTextField();
-        edSearchText.getDocument().addDocumentListener(new DocumentListener() {
-            @Override
-            public void removeUpdate(DocumentEvent e) {
-                filterItems();
-            }
-
-            @Override
-            public void insertUpdate(DocumentEvent e) {
-                filterItems();
-            }
-
-            @Override
-            public void changedUpdate(DocumentEvent e) {
-                filterItems();
-            }
-        });
+        edSearchText.getDocument().addDocumentListener(DocumentAdapter.create(ignore -> filterItems()));
         edSearchText.addKeyListener(new KeyAdapter() {
             @Override
