You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by rw...@apache.org on 2018/01/31 01:35:39 UTC

svn commit: r1822722 [1/3] - in /pivot/trunk: wtk-terra/src/org/apache/pivot/wtk/skin/terra/ wtk/src/org/apache/pivot/wtk/

Author: rwhitcomb
Date: Wed Jan 31 01:35:38 2018
New Revision: 1822722

URL: http://svn.apache.org/viewvc?rev=1822722&view=rev
Log:
PIVOT-1011:  A lot more work moving the ListenerList implementations for
listeners into the Listener interfaces themselves; implementing default
methods in the interface, and deprecating the "xxx.Adapter" classes.

Modified:
    pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraVFSBrowserSheetSkin.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/Accordion.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/AccordionAttributeListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/AccordionListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/AccordionSelectionListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/ActivityIndicator.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/ActivityIndicatorListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/Border.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/BorderListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/Expander.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/ExpanderListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheet.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheetListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/FillPane.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/FillPaneListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/Form.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/FormAttributeListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/FormListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/Frame.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/FrameListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/GridPane.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/GridPaneListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/ImageView.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/ImageViewBindingListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/ImageViewListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/Label.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/LabelBindingListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/LabelListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/Meter.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/MeterListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/MovieView.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/MovieViewListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/Prompt.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/PromptListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/Rollup.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/RollupListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/RollupStateListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/ScrollBar.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/ScrollBarListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/ScrollBarValueListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/Slider.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/SliderListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/SliderValueListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/SplitPane.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/SplitPaneListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/SuggestionPopup.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/SuggestionPopupCloseListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/SuggestionPopupItemListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/SuggestionPopupListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/SuggestionPopupSelectionListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/SuggestionPopupStateListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/TablePane.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/TablePaneAttributeListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/TablePaneListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/VFSBrowser.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/VFSBrowserListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/VFSBrowserSheet.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/VFSBrowserSheetListener.java

Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraVFSBrowserSheetSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraVFSBrowserSheetSkin.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraVFSBrowserSheetSkin.java (original)
+++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraVFSBrowserSheetSkin.java Wed Jan 31 01:35:38 2018
@@ -173,7 +173,7 @@ public class TerraVFSBrowserSheetSkin ex
             }
         });
 
-        fileBrowser.getFileBrowserListeners().add(new VFSBrowserListener.Adapter() {
+        fileBrowser.getFileBrowserListeners().add(new VFSBrowserListener() {
             @Override
             public void rootDirectoryChanged(VFSBrowser fileBrowserArgument,
                 FileObject previousRootDirectory) {

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/Accordion.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/Accordion.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/Accordion.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/Accordion.java Wed Jan 31 01:35:38 2018
@@ -143,63 +143,8 @@ public class Accordion extends Container
     }
 
     private enum Attribute {
-        HEADER_DATA, TOOLTIP_TEXT;
-    }
-
-    private static class AccordionListenerList extends ListenerList<AccordionListener> implements
-        AccordionListener {
-        @Override
-        public void panelInserted(Accordion accordion, int index) {
-            forEach(listener -> listener.panelInserted(accordion, index));
-        }
-
-        @Override
-        public void panelsRemoved(Accordion accordion, int index, Sequence<Component> panels) {
-            forEach(listener -> listener.panelsRemoved(accordion, index, panels));
-        }
-
-        @Override
-        public void headerDataRendererChanged(Accordion accordion,
-            Button.DataRenderer previousHeaderDataRenderer) {
-            forEach(listener -> listener.headerDataRendererChanged(accordion, previousHeaderDataRenderer));
-        }
-    }
-
-    private static class AccordionSelectionListenerList extends
-        ListenerList<AccordionSelectionListener> implements AccordionSelectionListener {
-        @Override
-        public Vote previewSelectedIndexChange(Accordion accordion, int selectedIndex) {
-            VoteResult result = new VoteResult();
-
-            forEach(listener -> result.tally(listener.previewSelectedIndexChange(accordion, selectedIndex)));
-
-            return result.get();
-        }
-
-        @Override
-        public void selectedIndexChangeVetoed(Accordion accordion, Vote reason) {
-            forEach(listener -> listener.selectedIndexChangeVetoed(accordion, reason));
-        }
-
-        @Override
-        public void selectedIndexChanged(Accordion accordion, int previousSelectedIndex) {
-            forEach(listener -> listener.selectedIndexChanged(accordion, previousSelectedIndex));
-        }
-    }
-
-    private static class AccordionAttributeListenerList extends
-        ListenerList<AccordionAttributeListener> implements AccordionAttributeListener {
-        @Override
-        public void headerDataChanged(Accordion accordion, Component component,
-            Object previousHeaderData) {
-            forEach(listener -> listener.headerDataChanged(accordion, component, previousHeaderData));
-        }
-
-        @Override
-        public void tooltipTextChanged(Accordion accordion, Component component,
-            String previousTooltipText) {
-            forEach(listener -> listener.tooltipTextChanged(accordion, component, previousTooltipText));
-        }
+        HEADER_DATA,
+        TOOLTIP_TEXT;
     }
 
     private ArrayList<Component> panels = new ArrayList<>();
@@ -207,9 +152,9 @@ public class Accordion extends Container
     private int selectedIndex = -1;
     private Button.DataRenderer headerDataRenderer = DEFAULT_HEADER_DATA_RENDERER;
 
-    private AccordionListenerList accordionListeners = new AccordionListenerList();
-    private AccordionSelectionListenerList accordionSelectionListeners = new AccordionSelectionListenerList();
-    private AccordionAttributeListenerList accordionAttributeListeners = new AccordionAttributeListenerList();
+    private AccordionListener.Listeners accordionListeners = new AccordionListener.Listeners();
+    private AccordionSelectionListener.Listeners accordionSelectionListeners = new AccordionSelectionListener.Listeners();
+    private AccordionAttributeListener.Listeners accordionAttributeListeners = new AccordionAttributeListener.Listeners();
 
     private static final Button.DataRenderer DEFAULT_HEADER_DATA_RENDERER = new AccordionHeaderDataRenderer();
 

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/AccordionAttributeListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/AccordionAttributeListener.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/AccordionAttributeListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/AccordionAttributeListener.java Wed Jan 31 01:35:38 2018
@@ -16,13 +16,35 @@
  */
 package org.apache.pivot.wtk;
 
+import org.apache.pivot.util.ListenerList;
+
 /**
  * Accordion attribute listener interface.
  */
 public interface AccordionAttributeListener {
     /**
+     * Accordion attribute listeners.
+     */
+    public static class Listeners extends ListenerList<AccordionAttributeListener>
+        implements AccordionAttributeListener {
+        @Override
+        public void headerDataChanged(Accordion accordion, Component component,
+            Object previousHeaderData) {
+            forEach(listener -> listener.headerDataChanged(accordion, component, previousHeaderData));
+        }
+
+        @Override
+        public void tooltipTextChanged(Accordion accordion, Component component,
+            String previousTooltipText) {
+            forEach(listener -> listener.tooltipTextChanged(accordion, component, previousTooltipText));
+        }
+    }
+
+    /**
      * Accordion attribute listener adapter.
+     * @deprecated Since 2.1 and Java 8 the interface itself has default implementations.
      */
+    @Deprecated
     public static class Adapter implements AccordionAttributeListener {
         @Override
         public void headerDataChanged(Accordion accordion, Component component,
@@ -44,8 +66,9 @@ public interface AccordionAttributeListe
      * @param component           The child component in question.
      * @param previousHeaderData  The previous header data for this component.
      */
-    public void headerDataChanged(Accordion accordion, Component component,
-        Object previousHeaderData);
+    default public void headerDataChanged(Accordion accordion, Component component,
+        Object previousHeaderData) {
+    }
 
     /**
      * Called when a panel's tooltip text has changed.
@@ -54,6 +77,7 @@ public interface AccordionAttributeListe
      * @param component           The child component in question.
      * @param previousTooltipText The previous tooltip text for the component.
      */
-    public void tooltipTextChanged(Accordion accordion, Component component,
-        String previousTooltipText);
+    default public void tooltipTextChanged(Accordion accordion, Component component,
+        String previousTooltipText) {
+    }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/AccordionListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/AccordionListener.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/AccordionListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/AccordionListener.java Wed Jan 31 01:35:38 2018
@@ -17,14 +17,38 @@
 package org.apache.pivot.wtk;
 
 import org.apache.pivot.collections.Sequence;
+import org.apache.pivot.util.ListenerList;
 
 /**
  * Accordion listener interface.
  */
 public interface AccordionListener {
     /**
+     * Accordion listeners.
+     */
+    public static class Listeners extends ListenerList<AccordionListener> implements AccordionListener {
+        @Override
+        public void panelInserted(Accordion accordion, int index) {
+            forEach(listener -> listener.panelInserted(accordion, index));
+        }
+
+        @Override
+        public void panelsRemoved(Accordion accordion, int index, Sequence<Component> panels) {
+            forEach(listener -> listener.panelsRemoved(accordion, index, panels));
+        }
+
+        @Override
+        public void headerDataRendererChanged(Accordion accordion,
+            Button.DataRenderer previousHeaderDataRenderer) {
+            forEach(listener -> listener.headerDataRendererChanged(accordion, previousHeaderDataRenderer));
+        }
+    }
+
+    /**
      * Accordion listener adapter.
+     * @deprecated Since 2.1 and Java 8 the interface itself has default implementations.
      */
+    @Deprecated
     public static class Adapter implements AccordionListener {
         @Override
         public void panelInserted(Accordion accordion, int index) {
@@ -49,7 +73,8 @@ public interface AccordionListener {
      * @param accordion The accordion that has changed.
      * @param index     The index of the newly inserted panel.
      */
-    public void panelInserted(Accordion accordion, int index);
+    default public void panelInserted(Accordion accordion, int index) {
+    }
 
     /**
      * Called when a panel has been removed from an accordion's panel sequence.
@@ -58,7 +83,8 @@ public interface AccordionListener {
      * @param index     The starting index of the panel(s) that were removed.
      * @param removed   The sequence of removed panels.
      */
-    public void panelsRemoved(Accordion accordion, int index, Sequence<Component> removed);
+    default public void panelsRemoved(Accordion accordion, int index, Sequence<Component> removed) {
+    }
 
     /**
      * Called when an accordion's header data renderer has changed.
@@ -66,6 +92,7 @@ public interface AccordionListener {
      * @param accordion                  The accordion that was changed.
      * @param previousHeaderDataRenderer The previous version of the header data renderer.
      */
-    public void headerDataRendererChanged(Accordion accordion,
-        Button.DataRenderer previousHeaderDataRenderer);
+    default public void headerDataRendererChanged(Accordion accordion,
+        Button.DataRenderer previousHeaderDataRenderer) {
+    }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/AccordionSelectionListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/AccordionSelectionListener.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/AccordionSelectionListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/AccordionSelectionListener.java Wed Jan 31 01:35:38 2018
@@ -16,15 +16,44 @@
  */
 package org.apache.pivot.wtk;
 
+import org.apache.pivot.util.ListenerList;
 import org.apache.pivot.util.Vote;
+import org.apache.pivot.util.VoteResult;
 
 /**
  * Accordion selection listener interface.
  */
 public interface AccordionSelectionListener {
     /**
+     * Accordion selection listeners.
+     */
+    public static class Listeners extends ListenerList<AccordionSelectionListener>
+        implements AccordionSelectionListener {
+        @Override
+        public Vote previewSelectedIndexChange(Accordion accordion, int selectedIndex) {
+            VoteResult result = new VoteResult();
+
+            forEach(listener -> result.tally(listener.previewSelectedIndexChange(accordion, selectedIndex)));
+
+            return result.get();
+        }
+
+        @Override
+        public void selectedIndexChangeVetoed(Accordion accordion, Vote reason) {
+            forEach(listener -> listener.selectedIndexChangeVetoed(accordion, reason));
+        }
+
+        @Override
+        public void selectedIndexChanged(Accordion accordion, int previousSelectedIndex) {
+            forEach(listener -> listener.selectedIndexChanged(accordion, previousSelectedIndex));
+        }
+    }
+
+    /**
      * Accordion selection listener adapter.
+     * @deprecated Since 2.1 and Java 8 the interface itself has default implementations.
      */
+    @Deprecated
     public static class Adapter implements AccordionSelectionListener {
         @Override
         public Vote previewSelectedIndexChange(Accordion accordion, int selectedIndex) {
@@ -49,7 +78,9 @@ public interface AccordionSelectionListe
      * @param selectedIndex The index that will be selected.
      * @return The consensus vote as to whether to allow the selected index change.
      */
-    public Vote previewSelectedIndexChange(Accordion accordion, int selectedIndex);
+    default public Vote previewSelectedIndexChange(Accordion accordion, int selectedIndex) {
+        return Vote.APPROVE;
+    }
 
     /**
      * Called when a selected index change has been vetoed.
@@ -57,7 +88,8 @@ public interface AccordionSelectionListe
      * @param accordion The source of the event.
      * @param reason The reason the event was vetoed.
      */
-    public void selectedIndexChangeVetoed(Accordion accordion, Vote reason);
+    default public void selectedIndexChangeVetoed(Accordion accordion, Vote reason) {
+    }
 
     /**
      * Called when an accordion's selected index has changed.
@@ -67,5 +99,6 @@ public interface AccordionSelectionListe
      * the index that was previously selected. Otherwise, contains the current
      * selection.
      */
-    public void selectedIndexChanged(Accordion accordion, int previousSelectedIndex);
+    default public void selectedIndexChanged(Accordion accordion, int previousSelectedIndex) {
+    }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/ActivityIndicator.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/ActivityIndicator.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ActivityIndicator.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ActivityIndicator.java Wed Jan 31 01:35:38 2018
@@ -22,19 +22,9 @@ import org.apache.pivot.util.ListenerLis
  * Component representing an activity indicator.
  */
 public class ActivityIndicator extends Component {
-    private static class ActivityIndicatorListenerList extends
-        ListenerList<ActivityIndicatorListener> implements ActivityIndicatorListener {
-        @Override
-        public void activeChanged(ActivityIndicator activityIndicator) {
-            for (ActivityIndicatorListener listener : this) {
-                listener.activeChanged(activityIndicator);
-            }
-        }
-    }
-
     private boolean active;
 
-    private ActivityIndicatorListenerList activityIndicatorListeners = new ActivityIndicatorListenerList();
+    private ActivityIndicatorListener.Listeners activityIndicatorListeners = new ActivityIndicatorListener.Listeners();
 
     public ActivityIndicator() {
         installSkin(ActivityIndicator.class);

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/ActivityIndicatorListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/ActivityIndicatorListener.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ActivityIndicatorListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ActivityIndicatorListener.java Wed Jan 31 01:35:38 2018
@@ -16,11 +16,24 @@
  */
 package org.apache.pivot.wtk;
 
+import org.apache.pivot.util.ListenerList;
+
 /**
  * Activity indicator listener interface.
  */
 public interface ActivityIndicatorListener {
     /**
+     * Activity indicator listeners.
+     */
+    public static class Listeners extends ListenerList<ActivityIndicatorListener>
+        implements ActivityIndicatorListener {
+        @Override
+        public void activeChanged(ActivityIndicator activityIndicator) {
+            forEach(listener -> listener.activeChanged(activityIndicator));
+        }
+    }
+
+    /**
      * Called when an activity indicator's active state has changed.
      *
      * @param activityIndicator Component whose state has changed.

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/Border.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/Border.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/Border.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/Border.java Wed Jan 31 01:35:38 2018
@@ -25,26 +25,9 @@ import org.apache.pivot.util.ListenerLis
  */
 @DefaultProperty("content")
 public class Border extends Container {
-    private static class BorderListenerList extends ListenerList<BorderListener> implements
-        BorderListener {
-        @Override
-        public void titleChanged(Border border, String previousTitle) {
-            for (BorderListener listener : this) {
-                listener.titleChanged(border, previousTitle);
-            }
-        }
-
-        @Override
-        public void contentChanged(Border border, Component previousContent) {
-            for (BorderListener listener : this) {
-                listener.contentChanged(border, previousContent);
-            }
-        }
-    }
-
     private String title = null;
     private Component content = null;
-    private BorderListenerList borderListeners = new BorderListenerList();
+    private BorderListener.Listeners borderListeners = new BorderListener.Listeners();
 
     public Border() {
         this(null);

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/BorderListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/BorderListener.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/BorderListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/BorderListener.java Wed Jan 31 01:35:38 2018
@@ -16,13 +16,32 @@
  */
 package org.apache.pivot.wtk;
 
+import org.apache.pivot.util.ListenerList;
+
 /**
  * Border listener interface.
  */
 public interface BorderListener {
     /**
+     * Border listeners.
+     */
+    public static class Listeners extends ListenerList<BorderListener> implements BorderListener {
+        @Override
+        public void titleChanged(Border border, String previousTitle) {
+            forEach(listener -> listener.titleChanged(border, previousTitle));
+        }
+
+        @Override
+        public void contentChanged(Border border, Component previousContent) {
+            forEach(listener -> listener.contentChanged(border, previousContent));
+        }
+    }
+
+    /**
      * Border listener adapter.
+     * @deprecated Since 2.1 and Java 8 the interface itself has default implementations.
      */
+    @Deprecated
     public static class Adapter implements BorderListener {
         @Override
         public void titleChanged(Border border, String previousTitle) {
@@ -41,7 +60,8 @@ public interface BorderListener {
      * @param border        The border component that has changed.
      * @param previousTitle The previous title for the border.
      */
-    public void titleChanged(Border border, String previousTitle);
+    default public void titleChanged(Border border, String previousTitle) {
+    }
 
     /**
      * Called when a border's content component has changed.
@@ -49,5 +69,6 @@ public interface BorderListener {
      * @param border          The border that has changed.
      * @param previousContent The previous content of the border.
      */
-    public void contentChanged(Border border, Component previousContent);
+    default public void contentChanged(Border border, Component previousContent) {
+    }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/Expander.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/Expander.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/Expander.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/Expander.java Wed Jan 31 01:35:38 2018
@@ -27,61 +27,12 @@ import org.apache.pivot.util.Vote;
  */
 @DefaultProperty("content")
 public class Expander extends Container {
-    private static class ExpanderListenerList extends ListenerList<ExpanderListener> implements
-        ExpanderListener {
-        @Override
-        public void titleChanged(Expander expander, String previousTitle) {
-            for (ExpanderListener listener : this) {
-                listener.titleChanged(expander, previousTitle);
-            }
-        }
-
-        @Override
-        public void collapsibleChanged(Expander expander) {
-            for (ExpanderListener listener : this) {
-                listener.collapsibleChanged(expander);
-            }
-        }
-
-        @Override
-        public Vote previewExpandedChange(Expander expander) {
-            Vote vote = Vote.APPROVE;
-
-            for (ExpanderListener listener : this) {
-                vote = vote.tally(listener.previewExpandedChange(expander));
-            }
-
-            return vote;
-        }
-
-        @Override
-        public void expandedChangeVetoed(Expander expander, Vote reason) {
-            for (ExpanderListener listener : this) {
-                listener.expandedChangeVetoed(expander, reason);
-            }
-        }
-
-        @Override
-        public void expandedChanged(Expander expander) {
-            for (ExpanderListener listener : this) {
-                listener.expandedChanged(expander);
-            }
-        }
-
-        @Override
-        public void contentChanged(Expander expander, Component previousContent) {
-            for (ExpanderListener listener : this) {
-                listener.contentChanged(expander, previousContent);
-            }
-        }
-    }
-
     private String title = null;
     private boolean collapsible = true;
     private boolean expanded = true;
     private Component content = null;
 
-    private ExpanderListenerList expanderListeners = new ExpanderListenerList();
+    private ExpanderListener.Listeners expanderListeners = new ExpanderListener.Listeners();
 
     public Expander() {
         installSkin(Expander.class);
@@ -127,7 +78,7 @@ public class Expander extends Container
     public void setCollapsible(boolean collapsible) {
         if (collapsible != this.collapsible) {
             if (!collapsible && !expanded) {
-                throw new IllegalStateException();
+                throw new IllegalStateException("Expander cannot be collapsed and yet not collapsible.");
             }
 
             this.collapsible = collapsible;
@@ -142,7 +93,7 @@ public class Expander extends Container
     public void setExpanded(boolean expanded) {
         if (expanded != this.expanded) {
             if (!collapsible && !expanded) {
-                throw new IllegalStateException();
+                throw new IllegalStateException("Expander cannot be collapsed and yet not collapsible.");
             }
 
             Vote vote = expanderListeners.previewExpandedChange(this);

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/ExpanderListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/ExpanderListener.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ExpanderListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ExpanderListener.java Wed Jan 31 01:35:38 2018
@@ -16,15 +16,60 @@
  */
 package org.apache.pivot.wtk;
 
+import org.apache.pivot.util.ListenerList;
 import org.apache.pivot.util.Vote;
+import org.apache.pivot.util.VoteResult;
+import org.apache.pivot.util.ListenerList;
 
 /**
- * Expander listener interface..
+ * Expander listener interface.
  */
 public interface ExpanderListener {
     /**
+     * Expander listeners.
+     */
+    public static class Listeners extends ListenerList<ExpanderListener> implements
+        ExpanderListener {
+        @Override
+        public void titleChanged(Expander expander, String previousTitle) {
+            forEach(listener -> listener.titleChanged(expander, previousTitle));
+        }
+
+        @Override
+        public void collapsibleChanged(Expander expander) {
+            forEach(listener -> listener.collapsibleChanged(expander));
+        }
+
+        @Override
+        public Vote previewExpandedChange(Expander expander) {
+            VoteResult result = new VoteResult();
+
+            forEach(listener -> result.tally(listener.previewExpandedChange(expander)));
+
+            return result.get();
+        }
+
+        @Override
+        public void expandedChangeVetoed(Expander expander, Vote reason) {
+            forEach(listener -> listener.expandedChangeVetoed(expander, reason));
+        }
+
+        @Override
+        public void expandedChanged(Expander expander) {
+            forEach(listener -> listener.expandedChanged(expander));
+        }
+
+        @Override
+        public void contentChanged(Expander expander, Component previousContent) {
+            forEach(listener -> listener.contentChanged(expander, previousContent));
+        }
+    }
+
+    /**
      * Expander listener adapter.
+     * @deprecated Since 2.1 and Java 8 the interface itself has default implementations.
      */
+    @Deprecated
     public static class Adapter implements ExpanderListener {
         @Override
         public void titleChanged(Expander expander, String previousTitle) {
@@ -63,14 +108,16 @@ public interface ExpanderListener {
      * @param expander      The expander that has changed.
      * @param previousTitle The previous title for the expander.
      */
-    public void titleChanged(Expander expander, String previousTitle);
+    default public void titleChanged(Expander expander, String previousTitle) {
+    }
 
     /**
      * Called when an expander's collapsible flag has changed.
      *
      * @param expander The expander that has changed.
      */
-    public void collapsibleChanged(Expander expander);
+    default public void collapsibleChanged(Expander expander) {
+    }
 
     /**
      * Called to preview an expanded change event.
@@ -78,7 +125,9 @@ public interface ExpanderListener {
      * @param expander The expander that is about to expand or collapse.
      * @return The consensus vote as to whether to allow the change.
      */
-    public Vote previewExpandedChange(Expander expander);
+    default public Vote previewExpandedChange(Expander expander) {
+        return Vote.APPROVE;
+    }
 
     /**
      * Called when an expanded change event has been vetoed.
@@ -86,14 +135,16 @@ public interface ExpanderListener {
      * @param expander The expander that is not going to change.
      * @param reason   The consensus vote that disallowed the change.
      */
-    public void expandedChangeVetoed(Expander expander, Vote reason);
+    default public void expandedChangeVetoed(Expander expander, Vote reason) {
+    }
 
     /**
      * Called when an expander's expanded state has changed.
      *
      * @param expander The expander that has now expanded or collapsed.
      */
-    public void expandedChanged(Expander expander);
+    default public void expandedChanged(Expander expander) {
+    }
 
     /**
      * Called when an expander's content component has changed.
@@ -101,5 +152,6 @@ public interface ExpanderListener {
      * @param expander        The expander that has changed content.
      * @param previousContent The previous content of the expander.
      */
-    public void contentChanged(Expander expander, Component previousContent);
+    default public void contentChanged(Expander expander, Component previousContent) {
+    }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheet.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheet.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheet.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheet.java Wed Jan 31 01:35:38 2018
@@ -34,52 +34,20 @@ public class FileBrowserSheet extends Sh
      * Enumeration defining supported modes.
      */
     public enum Mode {
-        OPEN, OPEN_MULTIPLE, SAVE_AS, SAVE_TO
+        OPEN,
+        OPEN_MULTIPLE,
+        SAVE_AS,
+        SAVE_TO
     }
 
     private static final String USER_HOME = System.getProperty("user.home");
 
-    private static class FileBrowserSheetListenerList extends
-        ListenerList<FileBrowserSheetListener> implements FileBrowserSheetListener {
-        @Override
-        public void modeChanged(FileBrowserSheet fileBrowserSheet,
-            FileBrowserSheet.Mode previousMode) {
-            for (FileBrowserSheetListener listener : this) {
-                listener.modeChanged(fileBrowserSheet, previousMode);
-            }
-        }
-
-        @Override
-        public void rootDirectoryChanged(FileBrowserSheet fileBrowserSheet,
-            File previousRootDirectory) {
-            for (FileBrowserSheetListener listener : this) {
-                listener.rootDirectoryChanged(fileBrowserSheet, previousRootDirectory);
-            }
-        }
-
-        @Override
-        public void selectedFilesChanged(FileBrowserSheet fileBrowserSheet,
-            Sequence<File> previousSelectedFiles) {
-            for (FileBrowserSheetListener listener : this) {
-                listener.selectedFilesChanged(fileBrowserSheet, previousSelectedFiles);
-            }
-        }
-
-        @Override
-        public void disabledFileFilterChanged(FileBrowserSheet fileBrowserSheet,
-            Filter<File> previousDisabledFileFilter) {
-            for (FileBrowserSheetListener listener : this) {
-                listener.disabledFileFilterChanged(fileBrowserSheet, previousDisabledFileFilter);
-            }
-        }
-    }
-
     private Mode mode;
     private File rootDirectory;
     private FileList selectedFiles = new FileList();
     private Filter<File> disabledFileFilter = null;
 
-    private FileBrowserSheetListenerList fileBrowserSheetListeners = new FileBrowserSheetListenerList();
+    private FileBrowserSheetListener.Listeners fileBrowserSheetListeners = new FileBrowserSheetListener.Listeners();
 
     /**
      * Creates a new FileBrowserSheet <p> Note that this version set by default

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheetListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheetListener.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheetListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/FileBrowserSheetListener.java Wed Jan 31 01:35:38 2018
@@ -20,14 +20,47 @@ import java.io.File;
 
 import org.apache.pivot.collections.Sequence;
 import org.apache.pivot.util.Filter;
+import org.apache.pivot.util.ListenerList;
 
 /**
  * File browser sheet listener interface.
  */
 public interface FileBrowserSheetListener {
     /**
+     * File browser sheet listeners.
+     */
+    public static class Listeners extends ListenerList<FileBrowserSheetListener>
+        implements FileBrowserSheetListener {
+        @Override
+        public void modeChanged(FileBrowserSheet fileBrowserSheet,
+            FileBrowserSheet.Mode previousMode) {
+            forEach(listener -> listener.modeChanged(fileBrowserSheet, previousMode));
+        }
+
+        @Override
+        public void rootDirectoryChanged(FileBrowserSheet fileBrowserSheet,
+            File previousRootDirectory) {
+            forEach(listener -> listener.rootDirectoryChanged(fileBrowserSheet, previousRootDirectory));
+        }
+
+        @Override
+        public void selectedFilesChanged(FileBrowserSheet fileBrowserSheet,
+            Sequence<File> previousSelectedFiles) {
+            forEach(listener -> listener.selectedFilesChanged(fileBrowserSheet, previousSelectedFiles));
+        }
+
+        @Override
+        public void disabledFileFilterChanged(FileBrowserSheet fileBrowserSheet,
+            Filter<File> previousDisabledFileFilter) {
+            forEach(listener -> listener.disabledFileFilterChanged(fileBrowserSheet, previousDisabledFileFilter));
+        }
+    }
+
+    /**
      * File browser sheet listener adapter.
+     * @deprecated Since 2.1 and Java 8 the interface itself has default implementations.
      */
+    @Deprecated
     public static class Adapter implements FileBrowserSheetListener {
         @Override
         public void modeChanged(FileBrowserSheet fileBrowserSheet,
@@ -60,7 +93,8 @@ public interface FileBrowserSheetListene
      * @param fileBrowserSheet The browser sheet that has changed.
      * @param previousMode     The previous mode that was in effect.
      */
-    public void modeChanged(FileBrowserSheet fileBrowserSheet, FileBrowserSheet.Mode previousMode);
+    default public void modeChanged(FileBrowserSheet fileBrowserSheet, FileBrowserSheet.Mode previousMode) {
+    }
 
     /**
      * Called when a file browser sheet's root directory has changed.
@@ -68,7 +102,8 @@ public interface FileBrowserSheetListene
      * @param fileBrowserSheet      The browser sheet that has changed.
      * @param previousRootDirectory The previous root directory that was being browsed.
      */
-    public void rootDirectoryChanged(FileBrowserSheet fileBrowserSheet, File previousRootDirectory);
+    default public void rootDirectoryChanged(FileBrowserSheet fileBrowserSheet, File previousRootDirectory) {
+    }
 
     /**
      * Called when a file browser sheet's selection state has been reset.
@@ -76,8 +111,9 @@ public interface FileBrowserSheetListene
      * @param fileBrowserSheet      The browser sheet that has changed.
      * @param previousSelectedFiles The complete sequence of files that used to be selected.
      */
-    public void selectedFilesChanged(FileBrowserSheet fileBrowserSheet,
-        Sequence<File> previousSelectedFiles);
+    default public void selectedFilesChanged(FileBrowserSheet fileBrowserSheet,
+        Sequence<File> previousSelectedFiles) {
+    }
 
     /**
      * Called when a file browser sheet's disabled file filter has changed.
@@ -85,6 +121,7 @@ public interface FileBrowserSheetListene
      * @param fileBrowserSheet           The browser sheet that has changed.
      * @param previousDisabledFileFilter The previous disabled file filter.
      */
-    public void disabledFileFilterChanged(FileBrowserSheet fileBrowserSheet,
-        Filter<File> previousDisabledFileFilter);
+    default public void disabledFileFilterChanged(FileBrowserSheet fileBrowserSheet,
+        Filter<File> previousDisabledFileFilter) {
+    }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/FillPane.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/FillPane.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/FillPane.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/FillPane.java Wed Jan 31 01:35:38 2018
@@ -64,16 +64,8 @@ import org.apache.pivot.util.Utils;
  * +--------------------------------------------------+</pre>
  */
 public class FillPane extends Container {
-    private static class FillPaneListenerList extends ListenerList<FillPaneListener> implements
-        FillPaneListener {
-        @Override
-        public void orientationChanged(FillPane fillPane) {
-            forEach(listener -> listener.orientationChanged(fillPane));
-        }
-    }
-
     private Orientation orientation = null;
-    private FillPaneListenerList fillPaneListeners = new FillPaneListenerList();
+    private FillPaneListener.Listeners fillPaneListeners = new FillPaneListener.Listeners();
 
     public FillPane() {
         this(Orientation.HORIZONTAL);

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/FillPaneListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/FillPaneListener.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/FillPaneListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/FillPaneListener.java Wed Jan 31 01:35:38 2018
@@ -16,11 +16,23 @@
  */
 package org.apache.pivot.wtk;
 
+import org.apache.pivot.util.ListenerList;
+
 /**
  * Fill pane listener interface.
  */
 public interface FillPaneListener {
     /**
+     * Fill pane listeners.
+     */
+    public static class Listeners extends ListenerList<FillPaneListener> implements FillPaneListener {
+        @Override
+        public void orientationChanged(FillPane fillPane) {
+            forEach(listener -> listener.orientationChanged(fillPane));
+        }
+    }
+
+    /**
      * Called when a fill pane's orientation has changed.
      *
      * @param fillPane The fill pane that has changed.

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/Form.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/Form.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/Form.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/Form.java Wed Jan 31 01:35:38 2018
@@ -343,60 +343,17 @@ public class Form extends Container {
     }
 
     private enum Attribute {
-        SECTION, LABEL, REQUIRED, FLAG;
-    }
-
-    private static class FormListenerList extends ListenerList<FormListener> implements
-        FormListener {
-        @Override
-        public void sectionInserted(Form form, int index) {
-            forEach(listener -> listener.sectionInserted(form, index));
-        }
-
-        @Override
-        public void sectionsRemoved(Form form, int index, Sequence<Section> removed) {
-            forEach(listener -> listener.sectionsRemoved(form, index, removed));
-        }
-
-        @Override
-        public void sectionHeadingChanged(Form.Section section) {
-            forEach(listener -> listener.sectionHeadingChanged(section));
-        }
-
-        @Override
-        public void fieldInserted(Section section, int index) {
-            forEach(listener -> listener.fieldInserted(section, index));
-        }
-
-        @Override
-        public void fieldsRemoved(Section section, int index, Sequence<Component> fields) {
-            forEach(listener -> listener.fieldsRemoved(section, index, fields));
-        }
-    }
-
-    private static class FormAttributeListenerList extends ListenerList<FormAttributeListener>
-        implements FormAttributeListener {
-        @Override
-        public void labelChanged(Form form, Component component, String previousLabel) {
-            forEach(listener -> listener.labelChanged(form, component, previousLabel));
-        }
-
-        @Override
-        public void requiredChanged(Form form, Component field) {
-            forEach(listener -> listener.requiredChanged(form, field));
-        }
-
-        @Override
-        public void flagChanged(Form form, Component component, Form.Flag previousFlag) {
-            forEach(listener -> listener.flagChanged(form, component, previousFlag));
-        }
+        SECTION,
+        LABEL,
+        REQUIRED,
+        FLAG;
     }
 
     private ArrayList<Section> sections = new ArrayList<>();
     private SectionSequence sectionSequence = new SectionSequence();
 
-    private FormListenerList formListeners = new FormListenerList();
-    private FormAttributeListenerList formAttributeListeners = new FormAttributeListenerList();
+    private FormListener.Listeners formListeners = new FormListener.Listeners();
+    private FormAttributeListener.Listeners formAttributeListeners = new FormAttributeListener.Listeners();
 
     /**
      * Creates a new form.

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/FormAttributeListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/FormAttributeListener.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/FormAttributeListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/FormAttributeListener.java Wed Jan 31 01:35:38 2018
@@ -16,13 +16,38 @@
  */
 package org.apache.pivot.wtk;
 
+import org.apache.pivot.util.ListenerList;
+
 /**
  * Form attribute listener interface.
  */
 public interface FormAttributeListener {
     /**
+     * Form attribute listeners.
+     */
+    public static class Listeners extends ListenerList<FormAttributeListener>
+        implements FormAttributeListener {
+        @Override
+        public void labelChanged(Form form, Component component, String previousLabel) {
+            forEach(listener -> listener.labelChanged(form, component, previousLabel));
+        }
+
+        @Override
+        public void requiredChanged(Form form, Component field) {
+            forEach(listener -> listener.requiredChanged(form, field));
+        }
+
+        @Override
+        public void flagChanged(Form form, Component component, Form.Flag previousFlag) {
+            forEach(listener -> listener.flagChanged(form, component, previousFlag));
+        }
+    }
+
+    /**
      * Form attribute listener adapter.
+     * @deprecated Since 2.1 and Java 8 the interface itself has default implementations.
      */
+    @Deprecated
     public class Adapter implements FormAttributeListener {
         @Override
         public void labelChanged(Form form, Component field, String previousLabel) {
@@ -47,7 +72,8 @@ public interface FormAttributeListener {
      * @param field         The field whose form label has changed.
      * @param previousLabel The previous form label for this field.
      */
-    public void labelChanged(Form form, Component field, String previousLabel);
+    default public void labelChanged(Form form, Component field, String previousLabel) {
+    }
 
     /**
      * Called when a fields's required attribute has changed.
@@ -55,7 +81,8 @@ public interface FormAttributeListener {
      * @param form  The enclosing form.
      * @param field The field that is or is not now required.
      */
-    public void requiredChanged(Form form, Component field);
+    default public void requiredChanged(Form form, Component field) {
+    }
 
     /**
      * Called when a field's flag attribute has changed.
@@ -64,5 +91,6 @@ public interface FormAttributeListener {
      * @param field        The field whose flag attribute has changed.
      * @param previousFlag The previous flag value for this field.
      */
-    public void flagChanged(Form form, Component field, Form.Flag previousFlag);
+    default public void flagChanged(Form form, Component field, Form.Flag previousFlag) {
+    }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/FormListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/FormListener.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/FormListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/FormListener.java Wed Jan 31 01:35:38 2018
@@ -17,14 +17,47 @@
 package org.apache.pivot.wtk;
 
 import org.apache.pivot.collections.Sequence;
+import org.apache.pivot.util.ListenerList;
 
 /**
  * Form listener interface.
  */
 public interface FormListener {
     /**
+     * Form listeners.
+     */
+    public static class Listeners extends ListenerList<FormListener> implements FormListener {
+        @Override
+        public void sectionInserted(Form form, int index) {
+            forEach(listener -> listener.sectionInserted(form, index));
+        }
+
+        @Override
+        public void sectionsRemoved(Form form, int index, Sequence<Form.Section> removed) {
+            forEach(listener -> listener.sectionsRemoved(form, index, removed));
+        }
+
+        @Override
+        public void sectionHeadingChanged(Form.Section section) {
+            forEach(listener -> listener.sectionHeadingChanged(section));
+        }
+
+        @Override
+        public void fieldInserted(Form.Section section, int index) {
+            forEach(listener -> listener.fieldInserted(section, index));
+        }
+
+        @Override
+        public void fieldsRemoved(Form.Section section, int index, Sequence<Component> fields) {
+            forEach(listener -> listener.fieldsRemoved(section, index, fields));
+        }
+    }
+
+    /**
      * Form listener adapter.
+     * @deprecated Since 2.1 and Java 8 the interface itself has default implementations.
      */
+    @Deprecated
     public static class Adapter implements FormListener {
         @Override
         public void sectionInserted(Form form, int index) {
@@ -58,7 +91,8 @@ public interface FormListener {
      * @param form  The form that has changed.
      * @param index The index where the new section has been inserted.
      */
-    public void sectionInserted(Form form, int index);
+    default public void sectionInserted(Form form, int index) {
+    }
 
     /**
      * Called when form sections have been removed.
@@ -67,14 +101,16 @@ public interface FormListener {
      * @param index   The starting index where sections were removed.
      * @param removed The complete sequence of the removed sections.
      */
-    public void sectionsRemoved(Form form, int index, Sequence<Form.Section> removed);
+    default public void sectionsRemoved(Form form, int index, Sequence<Form.Section> removed) {
+    }
 
     /**
      * Called when a form section's heading has changed.
      *
      * @param section The form section whose heading changed.
      */
-    public void sectionHeadingChanged(Form.Section section);
+    default public void sectionHeadingChanged(Form.Section section) {
+    }
 
     /**
      * Called when a form field has been inserted.
@@ -82,7 +118,8 @@ public interface FormListener {
      * @param section The enclosing form section that has changed.
      * @param index   The index where a new field has been inserted.
      */
-    public void fieldInserted(Form.Section section, int index);
+    default public void fieldInserted(Form.Section section, int index) {
+    }
 
     /**
      * Called when form fields have been removed.
@@ -91,5 +128,6 @@ public interface FormListener {
      * @param index   The starting index where fields were removed.
      * @param fields  The complete sequence of fields that were removed.
      */
-    public void fieldsRemoved(Form.Section section, int index, Sequence<Component> fields);
+    default public void fieldsRemoved(Form.Section section, int index, Sequence<Component> fields) {
+    }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/Frame.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/Frame.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/Frame.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/Frame.java Wed Jan 31 01:35:38 2018
@@ -24,19 +24,9 @@ import org.apache.pivot.util.ListenerLis
  * Container class representing a decorated frame window.
  */
 public class Frame extends Window {
-    private static class FrameListenerList extends ListenerList<FrameListener> implements
-        FrameListener {
-        @Override
-        public void menuBarChanged(Frame frame, MenuBar previousMenuBar) {
-            for (FrameListener listener : this) {
-                listener.menuBarChanged(frame, previousMenuBar);
-            }
-        }
-    }
-
     private MenuBar menuBar = null;
 
-    private FrameListenerList frameListeners = new FrameListenerList();
+    private FrameListener.Listeners frameListeners = new FrameListener.Listeners();
 
     public Frame() {
         this(null, null);

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/FrameListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/FrameListener.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/FrameListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/FrameListener.java Wed Jan 31 01:35:38 2018
@@ -16,11 +16,23 @@
  */
 package org.apache.pivot.wtk;
 
+import org.apache.pivot.util.ListenerList;
+
 /**
  * Frame listener interface.
  */
 public interface FrameListener {
     /**
+     * Frame listeners.
+     */
+    public static class Listeners extends ListenerList<FrameListener> implements FrameListener {
+        @Override
+        public void menuBarChanged(Frame frame, MenuBar previousMenuBar) {
+            forEach(listener -> listener.menuBarChanged(frame, previousMenuBar));
+        }
+    }
+
+    /**
      * Called when a frame's menu bar has changed.
      *
      * @param frame           The frame that has changed.

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/GridPane.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/GridPane.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/GridPane.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/GridPane.java Wed Jan 31 01:35:38 2018
@@ -269,45 +269,12 @@ public class GridPane extends Container
         }
     }
 
-    private static class GridPaneListenerList extends ListenerList<GridPaneListener> implements
-        GridPaneListener {
-        @Override
-        public void columnCountChanged(GridPane gridPane, int previousColumnCount) {
-            forEach(listener -> listener.columnCountChanged(gridPane, previousColumnCount));
-        }
-
-        @Override
-        public void rowInserted(GridPane gridPane, int index) {
-            forEach(listener -> listener.rowInserted(gridPane, index));
-        }
-
-        @Override
-        public void rowsRemoved(GridPane gridPane, int index, Sequence<GridPane.Row> rows) {
-            forEach(listener -> listener.rowsRemoved(gridPane, index, rows));
-        }
-
-        @Override
-        public void cellInserted(GridPane.Row row, int column) {
-            forEach(listener -> listener.cellInserted(row, column));
-        }
-
-        @Override
-        public void cellsRemoved(GridPane.Row row, int column, Sequence<Component> removed) {
-            forEach(listener -> listener.cellsRemoved(row, column, removed));
-        }
-
-        @Override
-        public void cellUpdated(GridPane.Row row, int column, Component previousComponent) {
-            forEach(listener -> listener.cellUpdated(row, column, previousComponent));
-        }
-    }
-
     private int columnCount;
 
     private ArrayList<Row> rows = new ArrayList<>();
     private RowSequence rowSequence = new RowSequence();
 
-    private GridPaneListenerList gridPaneListeners = new GridPaneListenerList();
+    private GridPaneListener.Listeners gridPaneListeners = new GridPaneListener.Listeners();
 
     /**
      * Creates a new grid pane.

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/GridPaneListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/GridPaneListener.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/GridPaneListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/GridPaneListener.java Wed Jan 31 01:35:38 2018
@@ -17,14 +17,53 @@
 package org.apache.pivot.wtk;
 
 import org.apache.pivot.collections.Sequence;
+import org.apache.pivot.util.ListenerList;
 
 /**
  * Grid pane listener interface.
  */
 public interface GridPaneListener {
     /**
+     * Grid pane listeners.
+     */
+    public static class Listeners extends ListenerList<GridPaneListener> implements
+        GridPaneListener {
+        @Override
+        public void columnCountChanged(GridPane gridPane, int previousColumnCount) {
+            forEach(listener -> listener.columnCountChanged(gridPane, previousColumnCount));
+        }
+
+        @Override
+        public void rowInserted(GridPane gridPane, int index) {
+            forEach(listener -> listener.rowInserted(gridPane, index));
+        }
+
+        @Override
+        public void rowsRemoved(GridPane gridPane, int index, Sequence<GridPane.Row> rows) {
+            forEach(listener -> listener.rowsRemoved(gridPane, index, rows));
+        }
+
+        @Override
+        public void cellInserted(GridPane.Row row, int column) {
+            forEach(listener -> listener.cellInserted(row, column));
+        }
+
+        @Override
+        public void cellsRemoved(GridPane.Row row, int column, Sequence<Component> removed) {
+            forEach(listener -> listener.cellsRemoved(row, column, removed));
+        }
+
+        @Override
+        public void cellUpdated(GridPane.Row row, int column, Component previousComponent) {
+            forEach(listener -> listener.cellUpdated(row, column, previousComponent));
+        }
+    }
+
+    /**
      * Grid pane listener adapter.
+     * @deprecated Since 2.1 and Java 8 the interface itself has default implementations.
      */
+    @Deprecated
     public static class Adapter implements GridPaneListener {
         @Override
         public void columnCountChanged(GridPane gridPane, int previousColumnCount) {
@@ -63,7 +102,8 @@ public interface GridPaneListener {
      * @param gridPane            The grid pane that has changed.
      * @param previousColumnCount The previous column count for the grid.
      */
-    public void columnCountChanged(GridPane gridPane, int previousColumnCount);
+    default public void columnCountChanged(GridPane gridPane, int previousColumnCount) {
+    }
 
     /**
      * Called when a row has been inserted into a grid pane.
@@ -71,7 +111,8 @@ public interface GridPaneListener {
      * @param gridPane The grid pane that has changed.
      * @param index    The index of the row that was just inserted.
      */
-    public void rowInserted(GridPane gridPane, int index);
+    default public void rowInserted(GridPane gridPane, int index) {
+    }
 
     /**
      * Called when rows have been removed from a grid pane.
@@ -80,7 +121,8 @@ public interface GridPaneListener {
      * @param index    The starting index of the row(s) that were removed.
      * @param rows     The complete sequence of removed rows.
      */
-    public void rowsRemoved(GridPane gridPane, int index, Sequence<GridPane.Row> rows);
+    default public void rowsRemoved(GridPane gridPane, int index, Sequence<GridPane.Row> rows) {
+    }
 
     /**
      * Called when a cell has been inserted into a grid pane.
@@ -88,7 +130,8 @@ public interface GridPaneListener {
      * @param row    The parent row of the cell that was inserted.
      * @param column The column index of the inserted cell.
      */
-    public void cellInserted(GridPane.Row row, int column);
+    default public void cellInserted(GridPane.Row row, int column) {
+    }
 
     /**
      * Called when cells have been removed from a grid pane.
@@ -97,7 +140,8 @@ public interface GridPaneListener {
      * @param column  The starting column index of the removed cells.
      * @param removed The complete sequence of removed cells.
      */
-    public void cellsRemoved(GridPane.Row row, int column, Sequence<Component> removed);
+    default public void cellsRemoved(GridPane.Row row, int column, Sequence<Component> removed) {
+    }
 
     /**
      * Called when a cell has been updated in a grid pane.
@@ -106,5 +150,6 @@ public interface GridPaneListener {
      * @param column            The column index of the updated cell.
      * @param previousComponent The previous contents of this cell.
      */
-    public void cellUpdated(GridPane.Row row, int column, Component previousComponent);
+    default public void cellUpdated(GridPane.Row row, int column, Component previousComponent) {
+    }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/ImageView.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/ImageView.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ImageView.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ImageView.java Wed Jan 31 01:35:38 2018
@@ -43,7 +43,9 @@ public class ImageView extends Component
          * Defines the supported load type mappings.
          */
         public enum Type {
-            IMAGE, URL, NAME
+            IMAGE,
+            URL,
+            NAME
         }
 
         /**
@@ -93,46 +95,14 @@ public class ImageView extends Component
         public Object valueOf(Image image);
     }
 
-    private static class ImageViewListenerList extends ListenerList<ImageViewListener> implements
-        ImageViewListener {
-        @Override
-        public void imageChanged(ImageView imageView, Image previousImage) {
-            forEach(listener -> listener.imageChanged(imageView, previousImage));
-        }
-
-        @Override
-        public void asynchronousChanged(ImageView imageView) {
-            forEach(listener -> listener.asynchronousChanged(imageView));
-        }
-    }
-
-    private static class ImageViewBindingListenerList extends
-        ListenerList<ImageViewBindingListener> implements ImageViewBindingListener {
-        @Override
-        public void imageKeyChanged(ImageView imageView, String previousImageKey) {
-            forEach(listener -> listener.imageKeyChanged(imageView, previousImageKey));
-        }
-
-        @Override
-        public void imageBindTypeChanged(ImageView imageView, BindType previousImageBindType) {
-            forEach(listener -> listener.imageBindTypeChanged(imageView, previousImageBindType));
-        }
-
-        @Override
-        public void imageBindMappingChanged(ImageView imageView,
-            ImageView.ImageBindMapping previousImageBindMapping) {
-            forEach(listener -> listener.imageBindMappingChanged(imageView, previousImageBindMapping));
-        }
-    }
-
     private Image image = null;
     private boolean asynchronous = false;
     private String imageKey = null;
     private BindType imageBindType = BindType.BOTH;
     private ImageBindMapping imageBindMapping = null;
 
-    private ImageViewListenerList imageViewListeners = new ImageViewListenerList();
-    private ImageViewBindingListenerList imageViewBindingListeners = new ImageViewBindingListenerList();
+    private ImageViewListener.Listeners imageViewListeners = new ImageViewListener.Listeners();
+    private ImageViewBindingListener.Listeners imageViewBindingListeners = new ImageViewBindingListener.Listeners();
 
     // Maintains a mapping of image URL to image views that should be notified when
     // an asynchronously loaded image is available

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/ImageViewBindingListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/ImageViewBindingListener.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ImageViewBindingListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ImageViewBindingListener.java Wed Jan 31 01:35:38 2018
@@ -16,13 +16,39 @@
  */
 package org.apache.pivot.wtk;
 
+import org.apache.pivot.util.ListenerList;
+
 /**
  * Image view binding listener.
  */
 public interface ImageViewBindingListener {
     /**
+     * Image view binding listeners.
+     */
+    public static class Listeners extends ListenerList<ImageViewBindingListener>
+        implements ImageViewBindingListener {
+        @Override
+        public void imageKeyChanged(ImageView imageView, String previousImageKey) {
+            forEach(listener -> listener.imageKeyChanged(imageView, previousImageKey));
+        }
+
+        @Override
+        public void imageBindTypeChanged(ImageView imageView, BindType previousImageBindType) {
+            forEach(listener -> listener.imageBindTypeChanged(imageView, previousImageBindType));
+        }
+
+        @Override
+        public void imageBindMappingChanged(ImageView imageView,
+            ImageView.ImageBindMapping previousImageBindMapping) {
+            forEach(listener -> listener.imageBindMappingChanged(imageView, previousImageBindMapping));
+        }
+    }
+
+    /**
      * Image view binding listener adapter.
+     * @deprecated Since 2.1 and Java 8 the interface itself has default implementations.
      */
+    @Deprecated
     public static class Adapter implements ImageViewBindingListener {
         @Override
         public void imageKeyChanged(ImageView imageView, String previousImageKey) {

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/ImageViewListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/ImageViewListener.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ImageViewListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ImageViewListener.java Wed Jan 31 01:35:38 2018
@@ -17,14 +17,33 @@
 package org.apache.pivot.wtk;
 
 import org.apache.pivot.wtk.media.Image;
+import org.apache.pivot.util.ListenerList;
 
 /**
  * Image view listener interface.
  */
 public interface ImageViewListener {
     /**
+     * Image view listeners.
+     */
+    public static class Listeners extends ListenerList<ImageViewListener> implements
+        ImageViewListener {
+        @Override
+        public void imageChanged(ImageView imageView, Image previousImage) {
+            forEach(listener -> listener.imageChanged(imageView, previousImage));
+        }
+
+        @Override
+        public void asynchronousChanged(ImageView imageView) {
+            forEach(listener -> listener.asynchronousChanged(imageView));
+        }
+    }
+
+    /**
      * Image view listener adapter.
+     * @deprecated Since 2.1 and Java 8 the interface itself has default implementations.
      */
+    @Deprecated
     public static class Adapter implements ImageViewListener {
         @Override
         public void imageChanged(ImageView imageView, Image previousImage) {
@@ -43,12 +62,14 @@ public interface ImageViewListener {
      * @param imageView     The image view whose image has changed.
      * @param previousImage The previous image associated with this image view.
      */
-    public void imageChanged(ImageView imageView, Image previousImage);
+    default public void imageChanged(ImageView imageView, Image previousImage) {
+    }
 
     /**
      * Called when an image view's asynchronous flag has changed.
      *
      * @param imageView The image view whose asynchronous flag has changed.
      */
-    public void asynchronousChanged(ImageView imageView);
+    default public void asynchronousChanged(ImageView imageView) {
+    }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/Label.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/Label.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/Label.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/Label.java Wed Jan 31 01:35:38 2018
@@ -48,39 +48,6 @@ public class Label extends Component {
         public Object valueOf(String text);
     }
 
-    private static class LabelListenerList extends ListenerList<LabelListener> implements
-        LabelListener {
-        @Override
-        public void textChanged(Label label, String previousText) {
-            forEach(listener -> listener.textChanged(label, previousText));
-        }
-
-        @Override
-        public void maximumLengthChanged(Label label, int previousMaximumLength) {
-            forEach(listener -> listener.maximumLengthChanged(label, previousMaximumLength));
-        }
-
-    }
-
-    private static class LabelBindingListenerList extends ListenerList<LabelBindingListener>
-        implements LabelBindingListener {
-        @Override
-        public void textKeyChanged(Label label, String previousTextKey) {
-            forEach(listener -> listener.textKeyChanged(label, previousTextKey));
-        }
-
-        @Override
-        public void textBindTypeChanged(Label label, BindType previousTextBindType) {
-            forEach(listener -> listener.textBindTypeChanged(label, previousTextBindType));
-        }
-
-        @Override
-        public void textBindMappingChanged(Label label,
-            Label.TextBindMapping previousTextBindMapping) {
-            forEach(listener -> listener.textBindMappingChanged(label, previousTextBindMapping));
-        }
-    }
-
     private String text = null;
     private int maximumLength = 32767;
 
@@ -88,8 +55,8 @@ public class Label extends Component {
     private BindType textBindType = BindType.BOTH;
     private TextBindMapping textBindMapping = null;
 
-    private LabelListenerList labelListeners = new LabelListenerList();
-    private LabelBindingListenerList labelBindingListeners = new LabelBindingListenerList();
+    private LabelListener.Listeners labelListeners = new LabelListener.Listeners();
+    private LabelBindingListener.Listeners labelBindingListeners = new LabelBindingListener.Listeners();
 
     public Label() {
         this("");

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/LabelBindingListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/LabelBindingListener.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/LabelBindingListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/LabelBindingListener.java Wed Jan 31 01:35:38 2018
@@ -16,13 +16,39 @@
  */
 package org.apache.pivot.wtk;
 
+import org.apache.pivot.util.ListenerList;
+
 /**
  * Label binding listener interface.
  */
 public interface LabelBindingListener {
     /**
+     * Label binding listeners.
+     */
+    public static class Listeners extends ListenerList<LabelBindingListener>
+        implements LabelBindingListener {
+        @Override
+        public void textKeyChanged(Label label, String previousTextKey) {
+            forEach(listener -> listener.textKeyChanged(label, previousTextKey));
+        }
+
+        @Override
+        public void textBindTypeChanged(Label label, BindType previousTextBindType) {
+            forEach(listener -> listener.textBindTypeChanged(label, previousTextBindType));
+        }
+
+        @Override
+        public void textBindMappingChanged(Label label,
+            Label.TextBindMapping previousTextBindMapping) {
+            forEach(listener -> listener.textBindMappingChanged(label, previousTextBindMapping));
+        }
+    }
+
+    /**
      * Label binding listener adapter.
+     * @deprecated Since 2.1 and Java 8 the interface itself has default implementations.
      */
+    @Deprecated
     public static class Adapter implements LabelBindingListener {
         @Override
         public void textKeyChanged(Label label, String previousTextKey) {
@@ -47,7 +73,8 @@ public interface LabelBindingListener {
      * @param label           The label whose binding has changed.
      * @param previousTextKey The previous binding key for the label text.
      */
-    public void textKeyChanged(Label label, String previousTextKey);
+    default public void textKeyChanged(Label label, String previousTextKey) {
+    }
 
     /**
      * Called when a label's text bind type has changed.
@@ -55,7 +82,8 @@ public interface LabelBindingListener {
      * @param label                The label whose binding has changed.
      * @param previousTextBindType The previous bind type for the label text.
      */
-    public void textBindTypeChanged(Label label, BindType previousTextBindType);
+    default public void textBindTypeChanged(Label label, BindType previousTextBindType) {
+    }
 
     /**
      * Called when a label's text bind mapping has changed.
@@ -63,5 +91,6 @@ public interface LabelBindingListener {
      * @param label                   The label whose binding has changed.
      * @param previousTextBindMapping The previous bind mapping for the label text.
      */
-    public void textBindMappingChanged(Label label, Label.TextBindMapping previousTextBindMapping);
+    default public void textBindMappingChanged(Label label, Label.TextBindMapping previousTextBindMapping) {
+    }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/LabelListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/LabelListener.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/LabelListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/LabelListener.java Wed Jan 31 01:35:38 2018
@@ -16,15 +16,33 @@
  */
 package org.apache.pivot.wtk;
 
+import org.apache.pivot.util.ListenerList;
+
 /**
  * Label listener interface.
  */
 public interface LabelListener {
     /**
+     * Label listeners.
+     */
+    public static class Listeners extends ListenerList<LabelListener> implements LabelListener {
+        @Override
+        public void textChanged(Label label, String previousText) {
+            forEach(listener -> listener.textChanged(label, previousText));
+        }
+
+        @Override
+        public void maximumLengthChanged(Label label, int previousMaximumLength) {
+            forEach(listener -> listener.maximumLengthChanged(label, previousMaximumLength));
+        }
+    }
+
+    /**
      * Label listener adapter.
+     * @deprecated Since 2.1 and Java 8 the interface itself has default implementations.
      */
+    @Deprecated
     public static class Adapter implements LabelListener {
-
         @Override
         public void textChanged(Label label, String previousText) {
             // empty block
@@ -42,7 +60,8 @@ public interface LabelListener {
      * @param label        The label that has changed.
      * @param previousText The previous text associated with the label.
      */
-    public void textChanged(Label label, String previousText);
+    default public void textChanged(Label label, String previousText) {
+    }
 
     /**
      * Called when a label text maximum length has changed.
@@ -50,6 +69,6 @@ public interface LabelListener {
      * @param label                 The label that has changed.
      * @param previousMaximumLength The previous maximum text length for the label.
      */
-    public void maximumLengthChanged(Label label, int previousMaximumLength);
-
+    default public void maximumLengthChanged(Label label, int previousMaximumLength) {
+    }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/Meter.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/Meter.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/Meter.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/Meter.java Wed Jan 31 01:35:38 2018
@@ -23,28 +23,10 @@ import org.apache.pivot.util.Utils;
  * Component that displays progress information.
  */
 public class Meter extends Component {
-    private static class MeterListenerList extends ListenerList<MeterListener> implements
-        MeterListener {
-        @Override
-        public void orientationChanged(Meter meter) {
-            forEach(listener -> listener.orientationChanged(meter));
-        }
-
-        @Override
-        public void percentageChanged(Meter meter, double oldPercentage) {
-            forEach(listener -> listener.percentageChanged(meter, oldPercentage));
-        }
-
-        @Override
-        public void textChanged(Meter meter, String oldText) {
-            forEach(listener -> listener.textChanged(meter, oldText));
-        }
-    }
-
     private double percentage = 0.0;
     private String text = null;
     private Orientation orientation = null;
-    private MeterListenerList meterListeners = new MeterListenerList();
+    private MeterListener.Listeners meterListeners = new MeterListener.Listeners();
 
     public Meter() {
         this(Orientation.HORIZONTAL);

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/MeterListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/MeterListener.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/MeterListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/MeterListener.java Wed Jan 31 01:35:38 2018
@@ -16,13 +16,38 @@
  */
 package org.apache.pivot.wtk;
 
+import org.apache.pivot.util.ListenerList;
+
 /**
  * Meter listener interface.
  */
 public interface MeterListener {
     /**
+     * Meter listeners.
+     */
+    public static class Listeners extends ListenerList<MeterListener> implements
+        MeterListener {
+        @Override
+        public void orientationChanged(Meter meter) {
+            forEach(listener -> listener.orientationChanged(meter));
+        }
+
+        @Override
+        public void percentageChanged(Meter meter, double oldPercentage) {
+            forEach(listener -> listener.percentageChanged(meter, oldPercentage));
+        }
+
+        @Override
+        public void textChanged(Meter meter, String oldText) {
+            forEach(listener -> listener.textChanged(meter, oldText));
+        }
+    }
+
+    /**
      * Meter listener adapter.
+     * @deprecated Since 2.1 and Java 8 the interface itself has default implementations.
      */
+    @Deprecated
     public static class Adapter implements MeterListener {
         @Override
         public void percentageChanged(Meter meter, double previousPercentage) {
@@ -46,7 +71,8 @@ public interface MeterListener {
      * @param meter The meter that is changing.
      * @param previousPercentage What the meter's percentage value used to be.
      */
-    public void percentageChanged(Meter meter, double previousPercentage);
+    default public void percentageChanged(Meter meter, double previousPercentage) {
+    }
 
     /**
      * Called when a meter's text has changed.
@@ -54,12 +80,14 @@ public interface MeterListener {
      * @param meter The meter that has changed.
      * @param previousText The previous meter text.
      */
-    public void textChanged(Meter meter, String previousText);
+    default public void textChanged(Meter meter, String previousText) {
+    }
 
     /**
      * Called when a sliders's orientation has changed.
      *
      * @param meter The source of the event.
      */
-    public void orientationChanged(Meter meter);
+    default public void orientationChanged(Meter meter) {
+    }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/MovieView.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/MovieView.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/MovieView.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/MovieView.java Wed Jan 31 01:35:38 2018
@@ -25,19 +25,9 @@ import org.apache.pivot.wtk.media.Movie;
  */
 @DefaultProperty("movie")
 public class MovieView extends Component {
-    private static class MovieViewListenerList extends ListenerList<MovieViewListener> implements
-        MovieViewListener {
-        @Override
-        public void movieChanged(MovieView movieView, Movie previousMovie) {
-            for (MovieViewListener listener : this) {
-                listener.movieChanged(movieView, previousMovie);
-            }
-        }
-    }
-
     private Movie movie = null;
 
-    private MovieViewListenerList movieViewListeners = new MovieViewListenerList();
+    private MovieViewListener.Listeners movieViewListeners = new MovieViewListener.Listeners();
 
     /**
      * Creates an empty movie view.

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/MovieViewListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/MovieViewListener.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/MovieViewListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/MovieViewListener.java Wed Jan 31 01:35:38 2018
@@ -17,12 +17,24 @@
 package org.apache.pivot.wtk;
 
 import org.apache.pivot.wtk.media.Movie;
+import org.apache.pivot.util.ListenerList;
 
 /**
  * Movie view listener interface.
  */
 public interface MovieViewListener {
     /**
+     * Movie view listeners.
+     */
+    public static class Listeners extends ListenerList<MovieViewListener> implements
+        MovieViewListener {
+        @Override
+        public void movieChanged(MovieView movieView, Movie previousMovie) {
+            forEach(listener -> listener.movieChanged(movieView, previousMovie));
+        }
+    }
+
+    /**
      * Called when an movie view's movie has changed.
      *
      * @param movieView The move view that has changed.

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/Prompt.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/Prompt.java?rev=1822722&r1=1822721&r2=1822722&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/Prompt.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/Prompt.java Wed Jan 31 01:35:38 2018
@@ -117,39 +117,6 @@ public class Prompt extends Sheet {
         }
     }
 
-    private static class PromptListenerList extends ListenerList<PromptListener> implements
-        PromptListener {
-        @Override
-        public void messageTypeChanged(Prompt prompt, MessageType previousMessageType) {
-            forEach(listener -> listener.messageTypeChanged(prompt, previousMessageType));
-        }
-
-        @Override
-        public void messageChanged(Prompt prompt, String previousMessage) {
-            forEach(listener -> listener.messageChanged(prompt, previousMessage));
-        }
-
-        @Override
-        public void bodyChanged(Prompt prompt, Component previousBody) {
-            forEach(listener -> listener.bodyChanged(prompt, previousBody));
-        }
-
-        @Override
-        public void optionInserted(Prompt prompt, int index) {
-            forEach(listener -> listener.optionInserted(prompt, index));
-        }
-
-        @Override
-        public void optionsRemoved(Prompt prompt, int index, Sequence<?> removed) {
-            forEach(listener -> listener.optionsRemoved(prompt, index, removed));
-        }
-
-        @Override
-        public void selectedOptionChanged(Prompt prompt, int previousSelectedOption) {
-            forEach(listener -> listener.selectedOptionChanged(prompt, previousSelectedOption));
-        }
-    }
-
     private MessageType messageType = null;
     private String message = null;
     private Component body = null;
@@ -158,7 +125,7 @@ public class Prompt extends Sheet {
     private OptionSequence optionSequence = new OptionSequence();
     private int selectedOptionIndex = -1;
 
-    private PromptListenerList promptListeners = new PromptListenerList();
+    private PromptListener.Listeners promptListeners = new PromptListener.Listeners();
 
     private static Resources resources = null;