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/23 15:31:40 UTC

svn commit: r1822015 [1/2] - in /pivot/trunk: demos/src/org/apache/pivot/demos/million/ demos/src/org/apache/pivot/demos/suggest/ demos/src/org/apache/pivot/demos/text/ tests/src/org/apache/pivot/tests/ tutorials/src/org/apache/pivot/tutorials/bxmlexpl...

Author: rwhitcomb
Date: Tue Jan 23 15:31:39 2018
New Revision: 1822015

URL: http://svn.apache.org/viewvc?rev=1822015&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.
This submission addresses the ListView and ListButton listeners, the
remaining TextInput listeners as well as some others.

Modified:
    pivot/trunk/demos/src/org/apache/pivot/demos/million/LargeData.java
    pivot/trunk/demos/src/org/apache/pivot/demos/suggest/SuggestionDemo.java
    pivot/trunk/demos/src/org/apache/pivot/demos/text/TextPaneDemo.java
    pivot/trunk/tests/src/org/apache/pivot/tests/CardPaneTest.java
    pivot/trunk/tests/src/org/apache/pivot/tests/CheckedListViewTest.java
    pivot/trunk/tests/src/org/apache/pivot/tests/SuggestionPopupTest.java
    pivot/trunk/tutorials/src/org/apache/pivot/tutorials/bxmlexplorer/BXMLExplorerWindow.java
    pivot/trunk/tutorials/src/org/apache/pivot/tutorials/explorer/ComponentExplorerWindow.java
    pivot/trunk/tutorials/src/org/apache/pivot/tutorials/explorer/tools/ComponentInspectorSkin.java
    pivot/trunk/tutorials/src/org/apache/pivot/tutorials/lists/ListButtons.java
    pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/MenuBars.java
    pivot/trunk/tutorials/src/org/apache/pivot/tutorials/stocktracker/StockTrackerWindow.java
    pivot/trunk/tutorials/src/org/apache/pivot/tutorials/text/SuggestionPopups.java
    pivot/trunk/tutorials/src/org/apache/pivot/tutorials/text/TextInputs.java
    pivot/trunk/web/src/org/apache/pivot/web/QueryListener.java
    pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraAccordionSkin.java
    pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraCalendarSkin.java
    pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSheetSkin.java
    pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSkin.java
    pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTabPaneSkin.java
    pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTextInputSkin.java
    pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraVFSBrowserSheetSkin.java
    pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraVFSBrowserSkin.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/ActionClassListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/BoxPaneListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/ButtonGroupListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButton.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButtonBindingListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButtonItemListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButtonListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButtonSelectionListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/ListView.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/ListViewBindingListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/ListViewItemListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/ListViewItemStateListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/RadioButtonGroup.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/TextInputContentListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/TextInputMethodListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/WTKListenerList.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkin.java

Modified: pivot/trunk/demos/src/org/apache/pivot/demos/million/LargeData.java
URL: http://svn.apache.org/viewvc/pivot/trunk/demos/src/org/apache/pivot/demos/million/LargeData.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/demos/src/org/apache/pivot/demos/million/LargeData.java (original)
+++ pivot/trunk/demos/src/org/apache/pivot/demos/million/LargeData.java Tue Jan 23 15:31:39 2018
@@ -170,8 +170,7 @@ public class LargeData implements Applic
         statusLabel = (Label) bxmlSerializer.getNamespace().get("statusLabel");
         tableView = (TableView) bxmlSerializer.getNamespace().get("tableView");
 
-        fileListButton.getListButtonSelectionListeners().add(
-            new ListButtonSelectionListener.Adapter() {
+        fileListButton.getListButtonSelectionListeners().add( new ListButtonSelectionListener() {
                 @Override
                 public void selectedItemChanged(ListButton listButtonArgument,
                     Object previousSelectedItem) {

Modified: pivot/trunk/demos/src/org/apache/pivot/demos/suggest/SuggestionDemo.java
URL: http://svn.apache.org/viewvc/pivot/trunk/demos/src/org/apache/pivot/demos/suggest/SuggestionDemo.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/demos/src/org/apache/pivot/demos/suggest/SuggestionDemo.java (original)
+++ pivot/trunk/demos/src/org/apache/pivot/demos/suggest/SuggestionDemo.java Tue Jan 23 15:31:39 2018
@@ -53,7 +53,7 @@ public class SuggestionDemo extends Wind
         textInput = (TextInput) namespace.get("textInput");
         activityIndicator = (ActivityIndicator) namespace.get("activityIndicator");
 
-        textInput.getTextInputContentListeners().add(new TextInputContentListener.Adapter() {
+        textInput.getTextInputContentListeners().add(new TextInputContentListener() {
             @Override
             public void textInserted(TextInput textInputArgument, int index, int count) {
                 getSuggestions();

Modified: pivot/trunk/demos/src/org/apache/pivot/demos/text/TextPaneDemo.java
URL: http://svn.apache.org/viewvc/pivot/trunk/demos/src/org/apache/pivot/demos/text/TextPaneDemo.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/demos/src/org/apache/pivot/demos/text/TextPaneDemo.java (original)
+++ pivot/trunk/demos/src/org/apache/pivot/demos/text/TextPaneDemo.java Tue Jan 23 15:31:39 2018
@@ -310,7 +310,7 @@ public class TextPaneDemo implements App
                 }
             });
 
-        ListButtonSelectionListener fontButtonPressListener = new ListButtonSelectionListener.Adapter() {
+        ListButtonSelectionListener fontButtonPressListener = new ListButtonSelectionListener() {
             @Override
             public void selectedItemChanged(ListButton listButton, Object previousSelectedItem) {
                 int selectedFontSize = ((Integer) fontSizeListButton.getSelectedItem()).intValue();

Modified: pivot/trunk/tests/src/org/apache/pivot/tests/CardPaneTest.java
URL: http://svn.apache.org/viewvc/pivot/trunk/tests/src/org/apache/pivot/tests/CardPaneTest.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/tests/src/org/apache/pivot/tests/CardPaneTest.java (original)
+++ pivot/trunk/tests/src/org/apache/pivot/tests/CardPaneTest.java Tue Jan 23 15:31:39 2018
@@ -52,7 +52,7 @@ public class CardPaneTest implements App
         cardPane = (CardPane) bxmlSerializer.getNamespace().get("cardPane");
         sizeGroup = (ButtonGroup) bxmlSerializer.getNamespace().get("sizeGroup");
 
-        sizeGroup.getButtonGroupListeners().add(new ButtonGroupListener.Adapter() {
+        sizeGroup.getButtonGroupListeners().add(new ButtonGroupListener() {
             @Override
             public void selectionChanged(ButtonGroup buttonGroup, Button previousSelection) {
                 final Button selection = buttonGroup.getSelection();

Modified: pivot/trunk/tests/src/org/apache/pivot/tests/CheckedListViewTest.java
URL: http://svn.apache.org/viewvc/pivot/trunk/tests/src/org/apache/pivot/tests/CheckedListViewTest.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/tests/src/org/apache/pivot/tests/CheckedListViewTest.java (original)
+++ pivot/trunk/tests/src/org/apache/pivot/tests/CheckedListViewTest.java Tue Jan 23 15:31:39 2018
@@ -96,7 +96,7 @@ public class CheckedListViewTest impleme
             }
         });
 
-        listView.getListViewItemStateListeners().add(new ListViewItemStateListener.Adapter() {
+        listView.getListViewItemStateListeners().add(new ListViewItemStateListener() {
 
             private void displayCheckedItems(ListView listView) {
                 List<?> listData = listView.getListData();

Modified: pivot/trunk/tests/src/org/apache/pivot/tests/SuggestionPopupTest.java
URL: http://svn.apache.org/viewvc/pivot/trunk/tests/src/org/apache/pivot/tests/SuggestionPopupTest.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/tests/src/org/apache/pivot/tests/SuggestionPopupTest.java (original)
+++ pivot/trunk/tests/src/org/apache/pivot/tests/SuggestionPopupTest.java Tue Jan 23 15:31:39 2018
@@ -47,7 +47,7 @@ public class SuggestionPopupTest impleme
             "suggestion_popup_test.bxml");
         bxmlSerializer.bind(this);
 
-        textInput.getTextInputContentListeners().add(new TextInputContentListener.Adapter() {
+        textInput.getTextInputContentListeners().add(new TextInputContentListener() {
             @Override
             public void textInserted(TextInput textInputArgument, int index, int count) {
                 ArrayList<String> suggestions = new ArrayList<>("One", "Two", "Three", "Four",

Modified: pivot/trunk/tutorials/src/org/apache/pivot/tutorials/bxmlexplorer/BXMLExplorerWindow.java
URL: http://svn.apache.org/viewvc/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/bxmlexplorer/BXMLExplorerWindow.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/tutorials/src/org/apache/pivot/tutorials/bxmlexplorer/BXMLExplorerWindow.java (original)
+++ pivot/trunk/tutorials/src/org/apache/pivot/tutorials/bxmlexplorer/BXMLExplorerWindow.java Tue Jan 23 15:31:39 2018
@@ -68,7 +68,7 @@ public class BXMLExplorerWindow extends
     private Menu.Item fileNewMenuItem;
 
     private MenuHandler menuHandler = new MenuHandler.Adapter() {
-        TextInputContentListener textInputTextListener = new TextInputContentListener.Adapter() {
+        TextInputContentListener textInputTextListener = new TextInputContentListener() {
             @Override
             public void textChanged(TextInput textInput) {
                 updateActionState(textInput);

Modified: pivot/trunk/tutorials/src/org/apache/pivot/tutorials/explorer/ComponentExplorerWindow.java
URL: http://svn.apache.org/viewvc/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/explorer/ComponentExplorerWindow.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/tutorials/src/org/apache/pivot/tutorials/explorer/ComponentExplorerWindow.java (original)
+++ pivot/trunk/tutorials/src/org/apache/pivot/tutorials/explorer/ComponentExplorerWindow.java Tue Jan 23 15:31:39 2018
@@ -196,8 +196,7 @@ public class ComponentExplorerWindow ext
             }
         });
 
-        horizontalScrollBarPolicyGroup.getButtonGroupListeners().add(
-            new ButtonGroupListener.Adapter() {
+        horizontalScrollBarPolicyGroup.getButtonGroupListeners().add(new ButtonGroupListener() {
                 @Override
                 public void selectionChanged(ButtonGroup buttonGroup, Button previousSelection) {
                     Button button = buttonGroup.getSelection();
@@ -222,8 +221,7 @@ public class ComponentExplorerWindow ext
                 }
             });
 
-        verticalScrollBarPolicyGroup.getButtonGroupListeners().add(
-            new ButtonGroupListener.Adapter() {
+        verticalScrollBarPolicyGroup.getButtonGroupListeners().add(new ButtonGroupListener() {
                 @Override
                 public void selectionChanged(ButtonGroup buttonGroup, Button previousSelection) {
                     Button button = buttonGroup.getSelection();

Modified: pivot/trunk/tutorials/src/org/apache/pivot/tutorials/explorer/tools/ComponentInspectorSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/explorer/tools/ComponentInspectorSkin.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/tutorials/src/org/apache/pivot/tutorials/explorer/tools/ComponentInspectorSkin.java (original)
+++ pivot/trunk/tutorials/src/org/apache/pivot/tutorials/explorer/tools/ComponentInspectorSkin.java Tue Jan 23 15:31:39 2018
@@ -422,7 +422,7 @@ abstract class ComponentInspectorSkin ex
         section.add(listButton);
         Form.setLabel(listButton, key);
 
-        listButton.getListButtonSelectionListeners().add(new ListButtonSelectionListener.Adapter() {
+        listButton.getListButtonSelectionListeners().add(new ListButtonSelectionListener() {
             private boolean updating = false;
 
             @Override

Modified: pivot/trunk/tutorials/src/org/apache/pivot/tutorials/lists/ListButtons.java
URL: http://svn.apache.org/viewvc/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/lists/ListButtons.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/tutorials/src/org/apache/pivot/tutorials/lists/ListButtons.java (original)
+++ pivot/trunk/tutorials/src/org/apache/pivot/tutorials/lists/ListButtons.java Tue Jan 23 15:31:39 2018
@@ -38,7 +38,7 @@ public class ListButtons extends Window
         listButton = (ListButton) namespace.get("listButton");
         imageView = (ImageView) namespace.get("imageView");
 
-        listButton.getListButtonSelectionListeners().add(new ListButtonSelectionListener.Adapter() {
+        listButton.getListButtonSelectionListeners().add(new ListButtonSelectionListener() {
             @Override
             public void selectedItemChanged(ListButton listButtonArgument,
                 Object previousSelectedItem) {

Modified: pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/MenuBars.java
URL: http://svn.apache.org/viewvc/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/MenuBars.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/MenuBars.java (original)
+++ pivot/trunk/tutorials/src/org/apache/pivot/tutorials/menus/MenuBars.java Tue Jan 23 15:31:39 2018
@@ -44,7 +44,7 @@ public class MenuBars extends Frame impl
     private TabPane tabPane = null;
 
     private MenuHandler menuHandler = new MenuHandler.Adapter() {
-        TextInputContentListener textInputTextListener = new TextInputContentListener.Adapter() {
+        TextInputContentListener textInputTextListener = new TextInputContentListener() {
             @Override
             public void textChanged(TextInput textInput) {
                 updateActionState(textInput);

Modified: pivot/trunk/tutorials/src/org/apache/pivot/tutorials/stocktracker/StockTrackerWindow.java
URL: http://svn.apache.org/viewvc/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/stocktracker/StockTrackerWindow.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/tutorials/src/org/apache/pivot/tutorials/stocktracker/StockTrackerWindow.java (original)
+++ pivot/trunk/tutorials/src/org/apache/pivot/tutorials/stocktracker/StockTrackerWindow.java Tue Jan 23 15:31:39 2018
@@ -227,7 +227,7 @@ public class StockTrackerWindow extends
         });
 
         // Add symbol text input event handlers
-        symbolTextInput.getTextInputContentListeners().add(new TextInputContentListener.Adapter() {
+        symbolTextInput.getTextInputContentListeners().add(new TextInputContentListener() {
             @Override
             public void textChanged(TextInput textInput) {
                 addSymbolAction.setEnabled(textInput.getCharacterCount() > 0);

Modified: pivot/trunk/tutorials/src/org/apache/pivot/tutorials/text/SuggestionPopups.java
URL: http://svn.apache.org/viewvc/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/text/SuggestionPopups.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/tutorials/src/org/apache/pivot/tutorials/text/SuggestionPopups.java (original)
+++ pivot/trunk/tutorials/src/org/apache/pivot/tutorials/text/SuggestionPopups.java Tue Jan 23 15:31:39 2018
@@ -95,7 +95,7 @@ public class SuggestionPopups extends Wi
     @Override
     public void initialize(Map<String, Object> namespace, URL location, Resources resources) {
         stateTextInput = (TextInput) namespace.get("stateTextInput");
-        stateTextInput.getTextInputContentListeners().add(new TextInputContentListener.Adapter() {
+        stateTextInput.getTextInputContentListeners().add(new TextInputContentListener() {
             @Override
             public void textInserted(TextInput textInput, int index, int count) {
                 String text = textInput.getText();

Modified: pivot/trunk/tutorials/src/org/apache/pivot/tutorials/text/TextInputs.java
URL: http://svn.apache.org/viewvc/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/text/TextInputs.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/tutorials/src/org/apache/pivot/tutorials/text/TextInputs.java (original)
+++ pivot/trunk/tutorials/src/org/apache/pivot/tutorials/text/TextInputs.java Tue Jan 23 15:31:39 2018
@@ -93,7 +93,7 @@ public class TextInputs extends Window i
     @Override
     public void initialize(Map<String, Object> namespace, URL location, Resources resources) {
         stateTextInput = (TextInput) namespace.get("stateTextInput");
-        stateTextInput.getTextInputContentListeners().add(new TextInputContentListener.Adapter() {
+        stateTextInput.getTextInputContentListeners().add(new TextInputContentListener() {
             @Override
             public void textInserted(final TextInput textInput, int index, int count) {
                 String text = textInput.getText();

Modified: pivot/trunk/web/src/org/apache/pivot/web/QueryListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/web/src/org/apache/pivot/web/QueryListener.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/web/src/org/apache/pivot/web/QueryListener.java (original)
+++ pivot/trunk/web/src/org/apache/pivot/web/QueryListener.java Tue Jan 23 15:31:39 2018
@@ -23,54 +23,55 @@ import org.apache.pivot.util.ListenerLis
  */
 public interface QueryListener<V> {
     /**
-     * Query listener adapter.
+     * Query listener listeners list.
      */
-    public static class Adapter<V> implements QueryListener<V> {
+    public static class Listeners<V> extends ListenerList<QueryListener<V>>
+        implements QueryListener<V> {
         @Override
-        public void connected(Query<V> query) {
-            // empty block
+        public synchronized void connected(Query<V> query) {
+            forEach(listener -> listener.connected(query));
         }
 
         @Override
-        public void requestSent(Query<V> query) {
-            // empty block
+        public synchronized void requestSent(Query<V> query) {
+            forEach(listener -> listener.requestSent(query));
         }
 
         @Override
-        public void responseReceived(Query<V> query) {
-            // empty block
+        public synchronized void responseReceived(Query<V> query) {
+            forEach(listener -> listener.responseReceived(query));
         }
 
         @Override
-        public void failed(Query<V> query) {
-            // empty block
+        public synchronized void failed(Query<V> query) {
+            forEach(listener -> listener.failed(query));
         }
     }
 
     /**
-     * Query listener listeners list.
+     * Query listener adapter.
+     * @deprecated Since 2.1 and Java 8 the interface itself has default implementations.
      */
-    public static class Listeners<V>
-            extends ListenerList<QueryListener<V>>
-            implements QueryListener<V> {
+    @Deprecated
+    public static class Adapter<V> implements QueryListener<V> {
         @Override
-        public synchronized void connected(Query<V> query) {
-            forEach(listener -> listener.connected(query));
+        public void connected(Query<V> query) {
+            // empty block
         }
 
         @Override
-        public synchronized void requestSent(Query<V> query) {
-            forEach(listener -> listener.requestSent(query));
+        public void requestSent(Query<V> query) {
+            // empty block
         }
 
         @Override
-        public synchronized void responseReceived(Query<V> query) {
-            forEach(listener -> listener.responseReceived(query));
+        public void responseReceived(Query<V> query) {
+            // empty block
         }
 
         @Override
-        public synchronized void failed(Query<V> query) {
-            forEach(listener -> listener.failed(query));
+        public void failed(Query<V> query) {
+            // empty block
         }
     }
 
@@ -80,7 +81,8 @@ public interface QueryListener<V> {
      *
      * @param query The query that has just connected.
      */
-    public void connected(Query<V> query);
+    default public void connected(Query<V> query) {
+    }
 
     /**
      * Called when the request has been sent to the server but the response has
@@ -88,19 +90,22 @@ public interface QueryListener<V> {
      *
      * @param query The query whose request has been sent.
      */
-    public void requestSent(Query<V> query);
+    default public void requestSent(Query<V> query) {
+    }
 
     /**
      * Called when a response has been received from the server.
      *
      * @param query The query whose response has just been received.
      */
-    public void responseReceived(Query<V> query);
+    default public void responseReceived(Query<V> query) {
+    }
 
     /**
      * Called when an error has occurred.
      *
      * @param query The query that has failed.
      */
-    public void failed(Query<V> query);
+    default public void failed(Query<V> query) {
+    }
 }

Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraAccordionSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraAccordionSkin.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraAccordionSkin.java (original)
+++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraAccordionSkin.java Tue Jan 23 15:31:39 2018
@@ -339,7 +339,7 @@ public class TerraAccordionSkin extends
         // Set the derived colors
         buttonBevelColor = TerraTheme.brighten(buttonBackgroundColor);
 
-        panelHeaderGroup.getButtonGroupListeners().add(new ButtonGroupListener.Adapter() {
+        panelHeaderGroup.getButtonGroupListeners().add(new ButtonGroupListener() {
             @Override
             public void selectionChanged(ButtonGroup buttonGroup, Button previousSelection) {
                 Button button = panelHeaderGroup.getSelection();

Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraCalendarSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraCalendarSkin.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraCalendarSkin.java (original)
+++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraCalendarSkin.java Tue Jan 23 15:31:39 2018
@@ -492,7 +492,7 @@ public class TerraCalendarSkin extends C
 
         // Add the buttons
         dateButtonGroup = new ButtonGroup();
-        dateButtonGroup.getButtonGroupListeners().add(new ButtonGroupListener.Adapter() {
+        dateButtonGroup.getButtonGroupListeners().add(new ButtonGroupListener() {
             @Override
             public void selectionChanged(ButtonGroup buttonGroup, Button previousSelection) {
                 Calendar calendar = (Calendar) getComponent();

Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSheetSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSheetSkin.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSheetSkin.java (original)
+++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSheetSkin.java Tue Jan 23 15:31:39 2018
@@ -111,7 +111,7 @@ public class TerraFileBrowserSheetSkin e
         // set the same rootDirectory to fileBrowser
         fileBrowser.setRootDirectory(fileBrowserSheet.getRootDirectory());
 
-        saveAsTextInput.getTextInputContentListeners().add(new TextInputContentListener.Adapter() {
+        saveAsTextInput.getTextInputContentListeners().add(new TextInputContentListener() {
             @Override
             public void textChanged(TextInput textInput) {
                 Form.clearFlag(saveAsBoxPane);

Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSkin.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSkin.java (original)
+++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSkin.java Tue Jan 23 15:31:39 2018
@@ -742,7 +742,7 @@ public class TerraFileBrowserSkin extend
         bxmlSerializer.bind(this, TerraFileBrowserSkin.class);
 
         driveListButton.getListButtonSelectionListeners().add(
-            new ListButtonSelectionListener.Adapter() {
+            new ListButtonSelectionListener() {
                 @Override
                 public void selectedItemChanged(ListButton listButton, Object previousSelectedItem) {
                     if (previousSelectedItem != null) {
@@ -760,7 +760,7 @@ public class TerraFileBrowserSkin extend
             });
 
         pathListButton.getListButtonSelectionListeners().add(
-            new ListButtonSelectionListener.Adapter() {
+            new ListButtonSelectionListener() {
                 @Override
                 public void selectedItemChanged(ListButton listButton, Object previousSelectedItem) {
                     File ancestorDirectory = (File) listButton.getSelectedItem();
@@ -819,7 +819,7 @@ public class TerraFileBrowserSkin extend
             }
         });
 
-        searchTextInput.getTextInputContentListeners().add(new TextInputContentListener.Adapter() {
+        searchTextInput.getTextInputContentListeners().add(new TextInputContentListener() {
             @Override
             public void textChanged(TextInput textInput) {
                 refreshFileList();

Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTabPaneSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTabPaneSkin.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTabPaneSkin.java (original)
+++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTabPaneSkin.java Tue Jan 23 15:31:39 2018
@@ -607,7 +607,7 @@ public class TerraTabPaneSkin extends Ta
         tabButtonPanorama.getStyles().putInt("buttonPadding", 6);
         tabButtonPanorama.setView(tabButtonBoxPane);
 
-        tabButtonGroup.getButtonGroupListeners().add(new ButtonGroupListener.Adapter() {
+        tabButtonGroup.getButtonGroupListeners().add(new ButtonGroupListener() {
             @Override
             public void selectionChanged(ButtonGroup buttonGroup, Button previousSelection) {
                 Button button = tabButtonGroup.getSelection();

Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTextInputSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTextInputSkin.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTextInputSkin.java (original)
+++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTextInputSkin.java Tue Jan 23 15:31:39 2018
@@ -131,7 +131,7 @@ public class TerraTextInputSkin extends
      * Private class that handles interaction with the Input Method Editor,
      * including requests and events.
      */
-    private class TextInputMethodHandler extends TextInputMethodListener.Adapter {
+    private class TextInputMethodHandler implements TextInputMethodListener {
 
         @Override
         public AttributedCharacterIterator getCommittedText(int beginIndex, int endIndex, AttributedCharacterIterator.Attribute[] attributes) {

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=1822015&r1=1822014&r2=1822015&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 Tue Jan 23 15:31:39 2018
@@ -165,7 +165,7 @@ public class TerraVFSBrowserSheetSkin ex
             throw new RuntimeException(fse);
         }
 
-        saveAsTextInput.getTextInputContentListeners().add(new TextInputContentListener.Adapter() {
+        saveAsTextInput.getTextInputContentListeners().add(new TextInputContentListener() {
             @Override
             public void textChanged(TextInput textInput) {
                 Form.clearFlag(saveAsBoxPane);

Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraVFSBrowserSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraVFSBrowserSkin.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraVFSBrowserSkin.java (original)
+++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraVFSBrowserSkin.java Tue Jan 23 15:31:39 2018
@@ -869,7 +869,7 @@ public class TerraVFSBrowserSkin extends
         homeDirectory = fileBrowser.getHomeDirectory();
 
         driveListButton.getListButtonSelectionListeners().add(
-            new ListButtonSelectionListener.Adapter() {
+            new ListButtonSelectionListener() {
                 @Override
                 public void selectedItemChanged(ListButton listButton, Object previousSelectedItem) {
                     if (previousSelectedItem != null) {
@@ -889,7 +889,7 @@ public class TerraVFSBrowserSkin extends
             });
 
         pathListButton.getListButtonSelectionListeners().add(
-            new ListButtonSelectionListener.Adapter() {
+            new ListButtonSelectionListener() {
                 @Override
                 public void selectedItemChanged(ListButton listButton, Object previousSelectedItem) {
                     FileObject ancestorDirectory = (FileObject) listButton.getSelectedItem();
@@ -960,7 +960,7 @@ public class TerraVFSBrowserSkin extends
             }
         });
 
-        searchTextInput.getTextInputContentListeners().add(new TextInputContentListener.Adapter() {
+        searchTextInput.getTextInputContentListeners().add(new TextInputContentListener() {
             @Override
             public void textChanged(TextInput textInput) {
                 refreshFileList();

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/ActionClassListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/ActionClassListener.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ActionClassListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ActionClassListener.java Tue Jan 23 15:31:39 2018
@@ -24,43 +24,45 @@ import org.apache.pivot.util.ListenerLis
  */
 public interface ActionClassListener {
     /**
-     * Action class listener adapter.
+     * Action class listener listeners list.
      */
-    public class Adapter implements ActionClassListener {
+    public static class Listeners extends ListenerList<ActionClassListener>
+        implements ActionClassListener {
         @Override
         public void actionAdded(String id) {
-            // empty block
+            forEach(listener -> listener.actionAdded(id));
         }
 
         @Override
         public void actionUpdated(String id, Action previousAction) {
-            // empty block
+            forEach(listener -> listener.actionUpdated(id, previousAction));
         }
 
         @Override
         public void actionRemoved(String id, Action action) {
-            // empty block
+            forEach(listener -> listener.actionRemoved(id, action));
         }
     }
 
     /**
-     * Action class listener listeners list.
+     * Action class listener adapter.
+     * @deprecated Since 2.1 and Java 8 the interface itself has default implementations.
      */
-    public static class Listeners extends ListenerList<ActionClassListener>
-        implements ActionClassListener {
+    @Deprecated
+    public class Adapter implements ActionClassListener {
         @Override
         public void actionAdded(String id) {
-            forEach(listener -> listener.actionAdded(id));
+            // empty block
         }
 
         @Override
         public void actionUpdated(String id, Action previousAction) {
-            forEach(listener -> listener.actionUpdated(id, previousAction));
+            // empty block
         }
 
         @Override
         public void actionRemoved(String id, Action action) {
-            forEach(listener -> listener.actionRemoved(id, action));
+            // empty block
         }
     }
 
@@ -69,7 +71,8 @@ public interface ActionClassListener {
      *
      * @param id The identifier for the newly added action.
      */
-    public void actionAdded(String id);
+    default public void actionAdded(String id) {
+    }
 
     /**
      * Called when an action has been updated in the named action dictionary.
@@ -77,7 +80,8 @@ public interface ActionClassListener {
      * @param id             The identifier for the updated action.
      * @param previousAction The previous {@link Action} associated with this identifier.
      */
-    public void actionUpdated(String id, Action previousAction);
+    default public void actionUpdated(String id, Action previousAction) {
+    }
 
     /**
      * Called when an action has been removed from the named action dictionary.
@@ -85,5 +89,6 @@ public interface ActionClassListener {
      * @param id     Identifier for the action that was removed.
      * @param action The removed action.
      */
-    public void actionRemoved(String id, Action action);
+    default public void actionRemoved(String id, Action action) {
+    }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/BoxPaneListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/BoxPaneListener.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/BoxPaneListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/BoxPaneListener.java Tue Jan 23 15:31:39 2018
@@ -26,8 +26,7 @@ public interface BoxPaneListener {
     /**
      * Box pane listener listeners list.
      */
-    public static class Listeners extends ListenerList<BoxPaneListener> implements
-        BoxPaneListener {
+    public static class Listeners extends ListenerList<BoxPaneListener> implements BoxPaneListener {
         @Override
         public void orientationChanged(BoxPane boxPane) {
             forEach(listener -> listener.orientationChanged(boxPane));

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/ButtonGroupListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/ButtonGroupListener.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ButtonGroupListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ButtonGroupListener.java Tue Jan 23 15:31:39 2018
@@ -24,43 +24,45 @@ import org.apache.pivot.util.ListenerLis
  */
 public interface ButtonGroupListener {
     /**
-     * Button group listener adapter.
+     * The button group listener listeners list.
      */
-    public class Adapter implements ButtonGroupListener {
+    public static class Listeners extends ListenerList<ButtonGroupListener>
+        implements ButtonGroupListener {
         @Override
         public void buttonAdded(ButtonGroup buttonGroup, Button button) {
-            // empty block
+            forEach(listener -> listener.buttonAdded(buttonGroup, button));
         }
 
         @Override
         public void buttonRemoved(ButtonGroup buttonGroup, Button button) {
-            // empty block
+            forEach(listener -> listener.buttonRemoved(buttonGroup, button));
         }
 
         @Override
         public void selectionChanged(ButtonGroup buttonGroup, Button previousSelection) {
-            // empty block
+            forEach(listener -> listener.selectionChanged(buttonGroup, previousSelection));
         }
     }
 
     /**
-     * The button group listener listeners list.
+     * Button group listener adapter.
+     * @deprecated Since 2.1 and Java 8 the interface itself has default implementations.
      */
-    public static class Listeners extends ListenerList<ButtonGroupListener>
-        implements ButtonGroupListener {
+    @Deprecated
+    public class Adapter implements ButtonGroupListener {
         @Override
         public void buttonAdded(ButtonGroup buttonGroup, Button button) {
-            forEach(listener -> listener.buttonAdded(buttonGroup, button));
+            // empty block
         }
 
         @Override
         public void buttonRemoved(ButtonGroup buttonGroup, Button button) {
-            forEach(listener -> listener.buttonRemoved(buttonGroup, button));
+            // empty block
         }
 
         @Override
         public void selectionChanged(ButtonGroup buttonGroup, Button previousSelection) {
-            forEach(listener -> listener.selectionChanged(buttonGroup, previousSelection));
+            // empty block
         }
     }
 
@@ -70,7 +72,8 @@ public interface ButtonGroupListener {
      * @param buttonGroup The button group that has changed.
      * @param button      The button that was added to the group.
      */
-    void buttonAdded(ButtonGroup buttonGroup, Button button);
+    default public void buttonAdded(ButtonGroup buttonGroup, Button button) {
+    }
 
     /**
      * Called when a button has been removed from a button group.
@@ -78,7 +81,8 @@ public interface ButtonGroupListener {
      * @param buttonGroup The button group that has changed.
      * @param button      The button that was removed from the group.
      */
-    void buttonRemoved(ButtonGroup buttonGroup, Button button);
+    default public void buttonRemoved(ButtonGroup buttonGroup, Button button) {
+    }
 
     /**
      * Called when a button group's selection has changed.
@@ -86,6 +90,6 @@ public interface ButtonGroupListener {
      * @param buttonGroup       The button group that changed.
      * @param previousSelection The previously selected button in the group.
      */
-    void selectionChanged(ButtonGroup buttonGroup, Button previousSelection);
-
+    default public void selectionChanged(ButtonGroup buttonGroup, Button previousSelection) {
+    }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButton.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButton.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButton.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButton.java Tue Jan 23 15:31:39 2018
@@ -41,113 +41,6 @@ import org.apache.pivot.wtk.content.List
  */
 @DefaultProperty("listData")
 public class ListButton extends Button {
-    private static class ListButtonListenerList extends ListenerList<ListButtonListener>
-        implements ListButtonListener {
-        @Override
-        public void listDataChanged(ListButton listButton, List<?> previousListData) {
-            forEach(listener -> listener.listDataChanged(listButton, previousListData));
-        }
-
-        @Override
-        public void itemRendererChanged(ListButton listButton,
-            ListView.ItemRenderer previousItemRenderer) {
-            forEach(listener -> listener.itemRendererChanged(listButton, previousItemRenderer));
-        }
-
-        @Override
-        public void repeatableChanged(ListButton listButton) {
-            forEach(listener -> listener.repeatableChanged(listButton));
-        }
-
-        @Override
-        public void disabledItemFilterChanged(ListButton listButton,
-            Filter<?> previousDisabledItemFilter) {
-            forEach(listener -> listener.disabledItemFilterChanged(listButton, previousDisabledItemFilter));
-        }
-
-        @Override
-        public void listSizeChanged(ListButton listButton, int previousListSize) {
-            forEach(listener -> listener.listSizeChanged(listButton, previousListSize));
-        }
-    }
-
-    private static class ListButtonItemListenerList extends ListenerList<ListButtonItemListener>
-        implements ListButtonItemListener {
-        @Override
-        public void itemInserted(ListButton listButton, int index) {
-            forEach(listener -> listener.itemInserted(listButton, index));
-        }
-
-        @Override
-        public void itemsRemoved(ListButton listButton, int index, int count) {
-            forEach(listener -> listener.itemsRemoved(listButton, index, count));
-        }
-
-        @Override
-        public void itemUpdated(ListButton listButton, int index) {
-            forEach(listener -> listener.itemUpdated(listButton, index));
-        }
-
-        @Override
-        public void itemsCleared(ListButton listButton) {
-            forEach(listener -> listener.itemsCleared(listButton));
-        }
-
-        @Override
-        public void itemsSorted(ListButton listButton) {
-            forEach(listener -> listener.itemsSorted(listButton));
-        }
-    }
-
-    private static class ListButtonSelectionListenerList extends
-        ListenerList<ListButtonSelectionListener> implements ListButtonSelectionListener {
-        @Override
-        public void selectedIndexChanged(ListButton listButton, int previousSelectedIndex) {
-            forEach(listener -> listener.selectedIndexChanged(listButton, previousSelectedIndex));
-        }
-
-        @Override
-        public void selectedItemChanged(ListButton listButton, Object previousSelectedItem) {
-            forEach(listener -> listener.selectedItemChanged(listButton, previousSelectedItem));
-        }
-    }
-
-    private static class ListButtonBindingListenerList extends
-        ListenerList<ListButtonBindingListener> implements ListButtonBindingListener {
-        @Override
-        public void listDataKeyChanged(ListButton listButton, String previousListDataKey) {
-            forEach(listener -> listener.listDataKeyChanged(listButton, previousListDataKey));
-        }
-
-        @Override
-        public void listDataBindTypeChanged(ListButton listButton, BindType previousListDataBindType) {
-            forEach(listener -> listener.listDataBindTypeChanged(listButton, previousListDataBindType));
-        }
-
-        @Override
-        public void listDataBindMappingChanged(ListButton listButton,
-            ListView.ListDataBindMapping previousListDataBindMapping) {
-            forEach(listener -> listener.listDataBindMappingChanged(listButton, previousListDataBindMapping));
-        }
-
-        @Override
-        public void selectedItemKeyChanged(ListButton listButton, String previousSelectedItemKey) {
-            forEach(listener -> listener.selectedItemKeyChanged(listButton, previousSelectedItemKey));
-        }
-
-        @Override
-        public void selectedItemBindTypeChanged(ListButton listButton,
-            BindType previousSelectedItemBindType) {
-            forEach(listener -> listener.selectedItemBindTypeChanged(listButton, previousSelectedItemBindType));
-        }
-
-        @Override
-        public void selectedItemBindMappingChanged(ListButton listButton,
-            ListView.ItemBindMapping previousSelectedItemBindMapping) {
-            forEach(listener -> listener.selectedItemBindMappingChanged(listButton, previousSelectedItemBindMapping));
-        }
-    }
-
     /**
      * ListButton skin interface. ListButton skins must implement this interface
      * to facilitate additional communication between the component and the
@@ -248,10 +141,10 @@ public class ListButton extends Button {
         }
     };
 
-    private ListButtonListenerList listButtonListeners = new ListButtonListenerList();
-    private ListButtonItemListenerList listButtonItemListeners = new ListButtonItemListenerList();
-    private ListButtonSelectionListenerList listButtonSelectionListeners = new ListButtonSelectionListenerList();
-    private ListButtonBindingListenerList listButtonBindingListeners = new ListButtonBindingListenerList();
+    private ListButtonListener.Listeners listButtonListeners = new ListButtonListener.Listeners();
+    private ListButtonItemListener.Listeners listButtonItemListeners = new ListButtonItemListener.Listeners();
+    private ListButtonSelectionListener.Listeners listButtonSelectionListeners = new ListButtonSelectionListener.Listeners();
+    private ListButtonBindingListener.Listeners listButtonBindingListeners = new ListButtonBindingListener.Listeners();
 
     private static final Button.DataRenderer DEFAULT_DATA_RENDERER = new ListButtonDataRenderer();
     private static final ListView.ItemRenderer DEFAULT_ITEM_RENDERER = new ListViewItemRenderer();

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButtonBindingListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButtonBindingListener.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButtonBindingListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButtonBindingListener.java Tue Jan 23 15:31:39 2018
@@ -16,13 +16,56 @@
  */
 package org.apache.pivot.wtk;
 
+import org.apache.pivot.util.ListenerList;
+
 /**
  * List button binding listener list interface.
  */
 public interface ListButtonBindingListener {
     /**
+     * List button binding listeners.
+     */
+    public static class Listeners extends ListenerList<ListButtonBindingListener>
+        implements ListButtonBindingListener {
+        @Override
+        public void listDataKeyChanged(ListButton listButton, String previousListDataKey) {
+            forEach(listener -> listener.listDataKeyChanged(listButton, previousListDataKey));
+        }
+
+        @Override
+        public void listDataBindTypeChanged(ListButton listButton, BindType previousListDataBindType) {
+            forEach(listener -> listener.listDataBindTypeChanged(listButton, previousListDataBindType));
+        }
+
+        @Override
+        public void listDataBindMappingChanged(ListButton listButton,
+            ListView.ListDataBindMapping previousListDataBindMapping) {
+            forEach(listener -> listener.listDataBindMappingChanged(listButton, previousListDataBindMapping));
+        }
+
+        @Override
+        public void selectedItemKeyChanged(ListButton listButton, String previousSelectedItemKey) {
+            forEach(listener -> listener.selectedItemKeyChanged(listButton, previousSelectedItemKey));
+        }
+
+        @Override
+        public void selectedItemBindTypeChanged(ListButton listButton,
+            BindType previousSelectedItemBindType) {
+            forEach(listener -> listener.selectedItemBindTypeChanged(listButton, previousSelectedItemBindType));
+        }
+
+        @Override
+        public void selectedItemBindMappingChanged(ListButton listButton,
+            ListView.ItemBindMapping previousSelectedItemBindMapping) {
+            forEach(listener -> listener.selectedItemBindMappingChanged(listButton, previousSelectedItemBindMapping));
+        }
+    }
+
+    /**
      * List button binding listener adapter.
+     * @deprecated Since 2.1 and Java 8 the interface itself has default implementations.
      */
+    @Deprecated
     public static class Adapter implements ListButtonBindingListener {
         @Override
         public void listDataKeyChanged(ListButton listButton, String previousListDataKey) {
@@ -64,7 +107,8 @@ public interface ListButtonBindingListen
      * @param listButton          The list button that has changed.
      * @param previousListDataKey The previous binding key for the list data.
      */
-    public void listDataKeyChanged(ListButton listButton, String previousListDataKey);
+    default public void listDataKeyChanged(ListButton listButton, String previousListDataKey) {
+    }
 
     /**
      * Called when a list button's list data bind type has changed.
@@ -72,7 +116,8 @@ public interface ListButtonBindingListen
      * @param listButton               The list button that has changed.
      * @param previousListDataBindType The previous bind type for the list data.
      */
-    public void listDataBindTypeChanged(ListButton listButton, BindType previousListDataBindType);
+    default public void listDataBindTypeChanged(ListButton listButton, BindType previousListDataBindType) {
+    }
 
     /**
      * Called when a list button's list data bind mapping has changed.
@@ -80,8 +125,9 @@ public interface ListButtonBindingListen
      * @param listButton                  The list button that has changed.
      * @param previousListDataBindMapping The previous bind mapping for the list data.
      */
-    public void listDataBindMappingChanged(ListButton listButton,
-        ListView.ListDataBindMapping previousListDataBindMapping);
+    default public void listDataBindMappingChanged(ListButton listButton,
+        ListView.ListDataBindMapping previousListDataBindMapping) {
+    }
 
     /**
      * Called when a list button's selected item key has changed.
@@ -89,7 +135,8 @@ public interface ListButtonBindingListen
      * @param listButton              The list button that has changed.
      * @param previousSelectedItemKey The previous binding key for the button's selected item.
      */
-    public void selectedItemKeyChanged(ListButton listButton, String previousSelectedItemKey);
+    default public void selectedItemKeyChanged(ListButton listButton, String previousSelectedItemKey) {
+    }
 
     /**
      * Called when a list button's selected item bind type has changed.
@@ -97,8 +144,9 @@ public interface ListButtonBindingListen
      * @param listButton                   The list button that has changed.
      * @param previousSelectedItemBindType The previous bind type for the selected item.
      */
-    public void selectedItemBindTypeChanged(ListButton listButton,
-        BindType previousSelectedItemBindType);
+    default public void selectedItemBindTypeChanged(ListButton listButton,
+        BindType previousSelectedItemBindType) {
+    }
 
     /**
      * Called when a list button's selected item bind mapping has changed.
@@ -106,6 +154,7 @@ public interface ListButtonBindingListen
      * @param listButton                      The list button that has changed.
      * @param previousSelectedItemBindMapping The previous bind mapping for the button's selected item.
      */
-    public void selectedItemBindMappingChanged(ListButton listButton,
-        ListView.ItemBindMapping previousSelectedItemBindMapping);
+    default public void selectedItemBindMappingChanged(ListButton listButton,
+        ListView.ItemBindMapping previousSelectedItemBindMapping) {
+    }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButtonItemListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButtonItemListener.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButtonItemListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButtonItemListener.java Tue Jan 23 15:31:39 2018
@@ -16,13 +16,48 @@
  */
 package org.apache.pivot.wtk;
 
+import org.apache.pivot.util.ListenerList;
+
 /**
  * List button item listener interface.
  */
 public interface ListButtonItemListener {
     /**
+     * List button item listeners.
+     */
+    public static class Listeners extends ListenerList<ListButtonItemListener>
+        implements ListButtonItemListener {
+        @Override
+        public void itemInserted(ListButton listButton, int index) {
+            forEach(listener -> listener.itemInserted(listButton, index));
+        }
+
+        @Override
+        public void itemsRemoved(ListButton listButton, int index, int count) {
+            forEach(listener -> listener.itemsRemoved(listButton, index, count));
+        }
+
+        @Override
+        public void itemUpdated(ListButton listButton, int index) {
+            forEach(listener -> listener.itemUpdated(listButton, index));
+        }
+
+        @Override
+        public void itemsCleared(ListButton listButton) {
+            forEach(listener -> listener.itemsCleared(listButton));
+        }
+
+        @Override
+        public void itemsSorted(ListButton listButton) {
+            forEach(listener -> listener.itemsSorted(listButton));
+        }
+    }
+
+    /**
      * List button item listener adapter.
+     * @deprecated Since 2.1 and Java 8 the interface itself has default implementations.
      */
+    @Deprecated
     public static class Adapter implements ListButtonItemListener {
         @Override
         public void itemInserted(ListButton listButton, int index) {
@@ -56,7 +91,8 @@ public interface ListButtonItemListener
      * @param listButton The list button that has changed.
      * @param index      The index where the new data was inserted.
      */
-    public void itemInserted(ListButton listButton, int index);
+    default public void itemInserted(ListButton listButton, int index) {
+    }
 
     /**
      * Called when items are removed from a list button's list data.
@@ -65,7 +101,8 @@ public interface ListButtonItemListener
      * @param index      The starting index of the removed data items.
      * @param count      The number of items removed.
      */
-    public void itemsRemoved(ListButton listButton, int index, int count);
+    default public void itemsRemoved(ListButton listButton, int index, int count) {
+    }
 
     /**
      * Called when an item is updated within a list button's list data.
@@ -73,19 +110,22 @@ public interface ListButtonItemListener
      * @param listButton The list button whose data has changed.
      * @param index      The index into the data list of the updated item.
      */
-    public void itemUpdated(ListButton listButton, int index);
+    default public void itemUpdated(ListButton listButton, int index) {
+    }
 
     /**
      * Called when a list button's list data has been cleared.
      *
      * @param listButton The list button whose data was cleared.
      */
-    public void itemsCleared(ListButton listButton);
+    default public void itemsCleared(ListButton listButton) {
+    }
 
     /**
      * Called when a list button's list data is sorted.
      *
      * @param listButton The list button whose data has been sorted.
      */
-    public void itemsSorted(ListButton listButton);
+    default public void itemsSorted(ListButton listButton) {
+    }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButtonListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButtonListener.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButtonListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButtonListener.java Tue Jan 23 15:31:39 2018
@@ -18,14 +18,50 @@ package org.apache.pivot.wtk;
 
 import org.apache.pivot.collections.List;
 import org.apache.pivot.util.Filter;
+import org.apache.pivot.util.ListenerList;
 
 /**
  * List button listener list interface.
  */
 public interface ListButtonListener {
     /**
+     * List button listeners.
+     */
+    public static class Listeners extends ListenerList<ListButtonListener>
+        implements ListButtonListener {
+        @Override
+        public void listDataChanged(ListButton listButton, List<?> previousListData) {
+            forEach(listener -> listener.listDataChanged(listButton, previousListData));
+        }
+
+        @Override
+        public void itemRendererChanged(ListButton listButton,
+            ListView.ItemRenderer previousItemRenderer) {
+            forEach(listener -> listener.itemRendererChanged(listButton, previousItemRenderer));
+        }
+
+        @Override
+        public void repeatableChanged(ListButton listButton) {
+            forEach(listener -> listener.repeatableChanged(listButton));
+        }
+
+        @Override
+        public void disabledItemFilterChanged(ListButton listButton,
+            Filter<?> previousDisabledItemFilter) {
+            forEach(listener -> listener.disabledItemFilterChanged(listButton, previousDisabledItemFilter));
+        }
+
+        @Override
+        public void listSizeChanged(ListButton listButton, int previousListSize) {
+            forEach(listener -> listener.listSizeChanged(listButton, previousListSize));
+        }
+    }
+
+    /**
      * List button listener adapter.
+     * @deprecated Since 2.1 and Java 8 the interface itself has default implementations.
      */
+    @Deprecated
     public static class Adapter implements ListButtonListener {
         @Override
         public void listDataChanged(ListButton listButton, List<?> previousListData) {
@@ -61,7 +97,8 @@ public interface ListButtonListener {
      * @param listButton       The list button that has changed.
      * @param previousListData The previous list data.
      */
-    public void listDataChanged(ListButton listButton, List<?> previousListData);
+    default public void listDataChanged(ListButton listButton, List<?> previousListData) {
+    }
 
     /**
      * Called when a list button's item renderer has changed.
@@ -69,15 +106,17 @@ public interface ListButtonListener {
      * @param listButton           The list button that was changed.
      * @param previousItemRenderer The previous renderer for the button's items.
      */
-    public void itemRendererChanged(ListButton listButton,
-        ListView.ItemRenderer previousItemRenderer);
+    default public void itemRendererChanged(ListButton listButton,
+        ListView.ItemRenderer previousItemRenderer) {
+    }
 
     /**
      * Called when a list button's repeatable flag has changed.
      *
      * @param listButton The list button that has changed.
      */
-    public void repeatableChanged(ListButton listButton);
+    default public void repeatableChanged(ListButton listButton) {
+    }
 
     /**
      * Called when a list button's disabled item filter has changed.
@@ -85,8 +124,9 @@ public interface ListButtonListener {
      * @param listButton                 The list button that has changed.
      * @param previousDisabledItemFilter The previous disabled item filter for the list button.
      */
-    public void disabledItemFilterChanged(ListButton listButton,
-        Filter<?> previousDisabledItemFilter);
+    default public void disabledItemFilterChanged(ListButton listButton,
+        Filter<?> previousDisabledItemFilter) {
+    }
 
     /**
      * Called when a list button's list size has changed.
@@ -94,5 +134,6 @@ public interface ListButtonListener {
      * @param listButton       The list button that has changed.
      * @param previousListSize The previous value of the visible list size.
      */
-    public void listSizeChanged(ListButton listButton, int previousListSize);
+    default public void listSizeChanged(ListButton listButton, int previousListSize) {
+    }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButtonSelectionListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButtonSelectionListener.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButtonSelectionListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ListButtonSelectionListener.java Tue Jan 23 15:31:39 2018
@@ -16,13 +16,33 @@
  */
 package org.apache.pivot.wtk;
 
+import org.apache.pivot.util.ListenerList;
+
 /**
  * List button selection listener interface.
  */
 public interface ListButtonSelectionListener {
     /**
+     * List button selection listeners.
+     */
+    public static class Listeners extends ListenerList<ListButtonSelectionListener>
+        implements ListButtonSelectionListener {
+        @Override
+        public void selectedIndexChanged(ListButton listButton, int previousSelectedIndex) {
+            forEach(listener -> listener.selectedIndexChanged(listButton, previousSelectedIndex));
+        }
+
+        @Override
+        public void selectedItemChanged(ListButton listButton, Object previousSelectedItem) {
+            forEach(listener -> listener.selectedItemChanged(listButton, previousSelectedItem));
+        }
+    }
+
+    /**
      * List button selection listener adapter.
+     * @deprecated Since 2.1 and Java 8 the interface itself has default implementations.
      */
+    @Deprecated
     public static class Adapter implements ListButtonSelectionListener {
         @Override
         public void selectedIndexChanged(ListButton listButton, int previousSelectedIndex) {
@@ -43,7 +63,8 @@ public interface ListButtonSelectionList
      * the index that was previously selected. Otherwise, contains the current
      * selection.
      */
-    public void selectedIndexChanged(ListButton listButton, int previousSelectedIndex);
+    default public void selectedIndexChanged(ListButton listButton, int previousSelectedIndex) {
+    }
 
     /**
      * Called when a list button's selected item has changed.
@@ -52,5 +73,6 @@ public interface ListButtonSelectionList
      * @param previousSelectedItem The item that was previously selected, or
      * <tt>null</tt> if the previous selection cannot be determined.
      */
-    public void selectedItemChanged(ListButton listButton, Object previousSelectedItem);
+    default public void selectedItemChanged(ListButton listButton, Object previousSelectedItem) {
+    }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/ListView.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/ListView.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ListView.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ListView.java Tue Jan 23 15:31:39 2018
@@ -211,133 +211,6 @@ public class ListView extends Component
         public void setState(Object item, Button.State state);
     }
 
-    private static class ListViewItemListenerList extends ListenerList<ListViewItemListener>
-        implements ListViewItemListener {
-        @Override
-        public void itemInserted(ListView listView, int index) {
-            forEach(listener -> listener.itemInserted(listView, index));
-        }
-
-        @Override
-        public void itemsRemoved(ListView listView, int index, int count) {
-            forEach(listener -> listener.itemsRemoved(listView, index, count));
-        }
-
-        @Override
-        public void itemUpdated(ListView listView, int index) {
-            forEach(listener -> listener.itemUpdated(listView, index));
-        }
-
-        @Override
-        public void itemsCleared(ListView listView) {
-            forEach(listener -> listener.itemsCleared(listView));
-        }
-
-        @Override
-        public void itemsSorted(ListView listView) {
-            forEach(listener -> listener.itemsSorted(listView));
-        }
-    }
-
-    private static class ListViewItemStateListenerList extends
-        ListenerList<ListViewItemStateListener> implements ListViewItemStateListener {
-        @Override
-        public void itemCheckedChanged(ListView listView, int index) {
-            forEach(listener -> listener.itemCheckedChanged(listView, index));
-        }
-
-        @Override
-        public void itemCheckedStateChanged(ListView listView, int index) {
-            forEach(listener -> listener.itemCheckedStateChanged(listView, index));
-        }
-    }
-
-    private static class ListViewBindingListenerList extends
-        ListenerList<ListViewBindingListener> implements ListViewBindingListener {
-        @Override
-        public void listDataKeyChanged(ListView listView, String previousListDataKey) {
-            forEach(listener -> listener.listDataKeyChanged(listView, previousListDataKey));
-        }
-
-        @Override
-        public void listDataBindTypeChanged(ListView listView, BindType previousListDataBindType) {
-            forEach(listener -> listener.listDataBindTypeChanged(listView, previousListDataBindType));
-        }
-
-        @Override
-        public void listDataBindMappingChanged(ListView listView,
-            ListView.ListDataBindMapping previousListDataBindMapping) {
-            forEach(listener -> listener.listDataBindMappingChanged(listView, previousListDataBindMapping));
-        }
-
-        @Override
-        public void selectedItemKeyChanged(ListView listView, String previousSelectedItemKey) {
-            forEach(listener -> listener.selectedItemKeyChanged(listView, previousSelectedItemKey));
-        }
-
-        @Override
-        public void selectedItemBindTypeChanged(ListView listView,
-            BindType previousSelectedItemBindType) {
-            forEach(listener -> listener.selectedItemBindTypeChanged(listView, previousSelectedItemBindType));
-        }
-
-        @Override
-        public void selectedItemBindMappingChanged(ListView listView,
-            ItemBindMapping previousSelectedItemBindMapping) {
-            forEach(listener -> listener.selectedItemBindMappingChanged(listView, previousSelectedItemBindMapping));
-        }
-
-        @Override
-        public void selectedItemsKeyChanged(ListView listView, String previousSelectedItemsKey) {
-            forEach(listener -> listener.selectedItemsKeyChanged(listView, previousSelectedItemsKey));
-        }
-
-        @Override
-        public void selectedItemsBindTypeChanged(ListView listView,
-            BindType previousSelectedItemsBindType) {
-            forEach(listener -> listener.selectedItemsBindTypeChanged(listView, previousSelectedItemsBindType));
-        }
-
-        @Override
-        public void selectedItemsBindMappingChanged(ListView listView,
-            ItemBindMapping previousSelectedItemsBindMapping) {
-            forEach(listener -> listener.selectedItemsBindMappingChanged(listView, previousSelectedItemsBindMapping));
-        }
-
-        @Override
-        public void checkedItemsKeyChanged(ListView listView, String previousCheckedItemsKey) {
-            forEach(listener -> listener.checkedItemsKeyChanged(listView, previousCheckedItemsKey));
-        }
-
-        @Override
-        public void checkedItemsBindTypeChanged(ListView listView,
-            BindType previousCheckedItemsBindType) {
-            forEach(listener -> listener.checkedItemsBindTypeChanged(listView, previousCheckedItemsBindType));
-        }
-
-        @Override
-        public void checkedItemsBindMappingChanged(ListView listView,
-            ListView.ItemBindMapping previousCheckedItemsBindMapping) {
-            forEach(listener -> listener.checkedItemsBindMappingChanged(listView, previousCheckedItemsBindMapping));
-        }
-
-        @Override
-        public void itemsStateKeyChanged(ListView listView, String previousItemsStateKey) {
-            forEach(listener -> listener.itemsStateKeyChanged(listView, previousItemsStateKey));
-        }
-
-        @Override
-        public void itemsStateBindTypeChanged(ListView listView, BindType previousItemsStateBindType) {
-            forEach(listener -> listener.itemsStateBindTypeChanged(listView, previousItemsStateBindType));
-        }
-
-        @Override
-        public void itemsStateBindMappingChanged(ListView listView,
-            ListView.ItemStateBindMapping previousItemsStateBindMapping) {
-            forEach(listener -> listener.itemsStateBindMappingChanged(listView, previousItemsStateBindMapping));
-        }
-    }
-
     private List<?> listData = null;
 
     private ItemRenderer itemRenderer = null;
@@ -530,10 +403,10 @@ public class ListView extends Component
     };
 
     private ListViewListener.Listeners listViewListeners = new ListViewListener.Listeners();
-    private ListViewItemListenerList listViewItemListeners = new ListViewItemListenerList();
-    private ListViewItemStateListenerList listViewItemStateListeners = new ListViewItemStateListenerList();
+    private ListViewItemListener.Listeners listViewItemListeners = new ListViewItemListener.Listeners();
+    private ListViewItemStateListener.Listeners listViewItemStateListeners = new ListViewItemStateListener.Listeners();
     private ListViewSelectionListener.Listeners listViewSelectionListeners = new ListViewSelectionListener.Listeners();
-    private ListViewBindingListenerList listViewBindingListeners = new ListViewBindingListenerList();
+    private ListViewBindingListener.Listeners listViewBindingListeners = new ListViewBindingListener.Listeners();
 
     private static final ItemRenderer DEFAULT_ITEM_RENDERER = new ListViewItemRenderer();
 

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/ListViewBindingListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/ListViewBindingListener.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ListViewBindingListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ListViewBindingListener.java Tue Jan 23 15:31:39 2018
@@ -16,13 +16,106 @@
  */
 package org.apache.pivot.wtk;
 
+import org.apache.pivot.util.ListenerList;
+
 /**
  * List view binding listener interface.
  */
 public interface ListViewBindingListener {
     /**
+     * List view binding listeners.
+     */
+    public static class Listeners extends ListenerList<ListViewBindingListener>
+        implements ListViewBindingListener {
+        @Override
+        public void listDataKeyChanged(ListView listView, String previousListDataKey) {
+            forEach(listener -> listener.listDataKeyChanged(listView, previousListDataKey));
+        }
+
+        @Override
+        public void listDataBindTypeChanged(ListView listView, BindType previousListDataBindType) {
+            forEach(listener -> listener.listDataBindTypeChanged(listView, previousListDataBindType));
+        }
+
+        @Override
+        public void listDataBindMappingChanged(ListView listView,
+            ListView.ListDataBindMapping previousListDataBindMapping) {
+            forEach(listener -> listener.listDataBindMappingChanged(listView, previousListDataBindMapping));
+        }
+
+        @Override
+        public void selectedItemKeyChanged(ListView listView, String previousSelectedItemKey) {
+            forEach(listener -> listener.selectedItemKeyChanged(listView, previousSelectedItemKey));
+        }
+
+        @Override
+        public void selectedItemBindTypeChanged(ListView listView,
+            BindType previousSelectedItemBindType) {
+            forEach(listener -> listener.selectedItemBindTypeChanged(listView, previousSelectedItemBindType));
+        }
+
+        @Override
+        public void selectedItemBindMappingChanged(ListView listView,
+            ListView.ItemBindMapping previousSelectedItemBindMapping) {
+            forEach(listener -> listener.selectedItemBindMappingChanged(listView, previousSelectedItemBindMapping));
+        }
+
+        @Override
+        public void selectedItemsKeyChanged(ListView listView, String previousSelectedItemsKey) {
+            forEach(listener -> listener.selectedItemsKeyChanged(listView, previousSelectedItemsKey));
+        }
+
+        @Override
+        public void selectedItemsBindTypeChanged(ListView listView,
+            BindType previousSelectedItemsBindType) {
+            forEach(listener -> listener.selectedItemsBindTypeChanged(listView, previousSelectedItemsBindType));
+        }
+
+        @Override
+        public void selectedItemsBindMappingChanged(ListView listView,
+            ListView.ItemBindMapping previousSelectedItemsBindMapping) {
+            forEach(listener -> listener.selectedItemsBindMappingChanged(listView, previousSelectedItemsBindMapping));
+        }
+
+        @Override
+        public void checkedItemsKeyChanged(ListView listView, String previousCheckedItemsKey) {
+            forEach(listener -> listener.checkedItemsKeyChanged(listView, previousCheckedItemsKey));
+        }
+
+        @Override
+        public void checkedItemsBindTypeChanged(ListView listView,
+            BindType previousCheckedItemsBindType) {
+            forEach(listener -> listener.checkedItemsBindTypeChanged(listView, previousCheckedItemsBindType));
+        }
+
+        @Override
+        public void checkedItemsBindMappingChanged(ListView listView,
+            ListView.ItemBindMapping previousCheckedItemsBindMapping) {
+            forEach(listener -> listener.checkedItemsBindMappingChanged(listView, previousCheckedItemsBindMapping));
+        }
+
+        @Override
+        public void itemsStateKeyChanged(ListView listView, String previousItemsStateKey) {
+            forEach(listener -> listener.itemsStateKeyChanged(listView, previousItemsStateKey));
+        }
+
+        @Override
+        public void itemsStateBindTypeChanged(ListView listView, BindType previousItemsStateBindType) {
+            forEach(listener -> listener.itemsStateBindTypeChanged(listView, previousItemsStateBindType));
+        }
+
+        @Override
+        public void itemsStateBindMappingChanged(ListView listView,
+            ListView.ItemStateBindMapping previousItemsStateBindMapping) {
+            forEach(listener -> listener.itemsStateBindMappingChanged(listView, previousItemsStateBindMapping));
+        }
+    }
+
+    /**
      * List view binding listener adapter.
+     * @deprecated Since 2.1 and Java 8 the interface itself has default implementations.
      */
+    @Deprecated
     public static class Adapter implements ListViewBindingListener {
         @Override
         public void listDataKeyChanged(ListView listView, String previousListDataKey) {
@@ -114,7 +207,8 @@ public interface ListViewBindingListener
      * @param listView            The list view whose binding has changed.
      * @param previousListDataKey The previous binding key for the list data.
      */
-    public void listDataKeyChanged(ListView listView, String previousListDataKey);
+    default public void listDataKeyChanged(ListView listView, String previousListDataKey) {
+    }
 
     /**
      * Called when a list view's list data bind type has changed.
@@ -122,7 +216,8 @@ public interface ListViewBindingListener
      * @param listView                 The list view whose binding has changed.
      * @param previousListDataBindType The previous bind type for the list data.
      */
-    public void listDataBindTypeChanged(ListView listView, BindType previousListDataBindType);
+    default public void listDataBindTypeChanged(ListView listView, BindType previousListDataBindType) {
+    }
 
     /**
      * Called when a list view's list data bind mapping has changed.
@@ -130,8 +225,9 @@ public interface ListViewBindingListener
      * @param listView                    The list view whose binding has changed.
      * @param previousListDataBindMapping The previous bind mapping for the list data.
      */
-    public void listDataBindMappingChanged(ListView listView,
-        ListView.ListDataBindMapping previousListDataBindMapping);
+    default public void listDataBindMappingChanged(ListView listView,
+        ListView.ListDataBindMapping previousListDataBindMapping) {
+    }
 
     /**
      * Called when a list view's selected item key has changed.
@@ -139,7 +235,8 @@ public interface ListViewBindingListener
      * @param listView                The list view whose binding has changed.
      * @param previousSelectedItemKey The previous binding key for the selected item.
      */
-    public void selectedItemKeyChanged(ListView listView, String previousSelectedItemKey);
+    default public void selectedItemKeyChanged(ListView listView, String previousSelectedItemKey) {
+    }
 
     /**
      * Called when a list view's selected item bind type has changed.
@@ -147,7 +244,8 @@ public interface ListViewBindingListener
      * @param listView                     The list view whose binding has changed.
      * @param previousSelectedItemBindType The previous bind type for the selected item.
      */
-    public void selectedItemBindTypeChanged(ListView listView, BindType previousSelectedItemBindType);
+    default public void selectedItemBindTypeChanged(ListView listView, BindType previousSelectedItemBindType) {
+    }
 
     /**
      * Called when a list view's selected item bind mapping has changed.
@@ -155,8 +253,9 @@ public interface ListViewBindingListener
      * @param listView                        The list view whose binding has changed.
      * @param previousSelectedItemBindMapping The previous bind mapping for the selected item.
      */
-    public void selectedItemBindMappingChanged(ListView listView,
-        ListView.ItemBindMapping previousSelectedItemBindMapping);
+    default public void selectedItemBindMappingChanged(ListView listView,
+        ListView.ItemBindMapping previousSelectedItemBindMapping) {
+    }
 
     /**
      * Called when a list view's selected items key has changed.
@@ -164,7 +263,8 @@ public interface ListViewBindingListener
      * @param listView                 The list view whose binding has changed.
      * @param previousSelectedItemsKey The previous binding key for the selected items.
      */
-    public void selectedItemsKeyChanged(ListView listView, String previousSelectedItemsKey);
+    default public void selectedItemsKeyChanged(ListView listView, String previousSelectedItemsKey) {
+    }
 
     /**
      * Called when a list view's selected items bind type has changed.
@@ -172,8 +272,9 @@ public interface ListViewBindingListener
      * @param listView                      The list view whose binding has changed.
      * @param previousSelectedItemsBindType The previous bind type for the selected items.
      */
-    public void selectedItemsBindTypeChanged(ListView listView,
-        BindType previousSelectedItemsBindType);
+    default public void selectedItemsBindTypeChanged(ListView listView,
+        BindType previousSelectedItemsBindType) {
+    }
 
     /**
      * Called when a list view's selected items bind mapping has changed.
@@ -181,8 +282,9 @@ public interface ListViewBindingListener
      * @param listView                         The list view whose binding has changed.
      * @param previousSelectedItemsBindMapping The previous bind mapping for the selected items.
      */
-    public void selectedItemsBindMappingChanged(ListView listView,
-        ListView.ItemBindMapping previousSelectedItemsBindMapping);
+    default public void selectedItemsBindMappingChanged(ListView listView,
+        ListView.ItemBindMapping previousSelectedItemsBindMapping) {
+    }
 
     /**
      * Called when a list view's checked items key has changed.
@@ -190,7 +292,8 @@ public interface ListViewBindingListener
      * @param listView                The list view whose binding has changed.
      * @param previousCheckedItemsKey The previous binding key for the checked items.
      */
-    public void checkedItemsKeyChanged(ListView listView, String previousCheckedItemsKey);
+    default public void checkedItemsKeyChanged(ListView listView, String previousCheckedItemsKey) {
+    }
 
     /**
      * Called when a list view's checked items bind type has changed.
@@ -198,7 +301,8 @@ public interface ListViewBindingListener
      * @param listView                     The list view whose binding has changed.
      * @param previousCheckedItemsBindType The previous bind type for the checked items.
      */
-    public void checkedItemsBindTypeChanged(ListView listView, BindType previousCheckedItemsBindType);
+    default public void checkedItemsBindTypeChanged(ListView listView, BindType previousCheckedItemsBindType) {
+    }
 
     /**
      * Called when a list view's checked items bind mapping has changed.
@@ -206,8 +310,9 @@ public interface ListViewBindingListener
      * @param listView                        The list view whose binding has changed.
      * @param previousCheckedItemsBindMapping The previous bind mapping function for the checked items.
      */
-    public void checkedItemsBindMappingChanged(ListView listView,
-        ListView.ItemBindMapping previousCheckedItemsBindMapping);
+    default public void checkedItemsBindMappingChanged(ListView listView,
+        ListView.ItemBindMapping previousCheckedItemsBindMapping) {
+    }
 
     /**
      * Called when a list view's items' state key has changed.
@@ -215,7 +320,8 @@ public interface ListViewBindingListener
      * @param listView              The list view whose binding has changed.
      * @param previousItemsStateKey The previous bind key for the items' state.
      */
-    public void itemsStateKeyChanged(ListView listView, String previousItemsStateKey);
+    default public void itemsStateKeyChanged(ListView listView, String previousItemsStateKey) {
+    }
 
     /**
      * Called when a list view's items' state bind type has changed.
@@ -223,7 +329,8 @@ public interface ListViewBindingListener
      * @param listView                   The list view whose binding has changed.
      * @param previousItemsStateBindType The previous bind type for the items' state.
      */
-    public void itemsStateBindTypeChanged(ListView listView, BindType previousItemsStateBindType);
+    default public void itemsStateBindTypeChanged(ListView listView, BindType previousItemsStateBindType) {
+    }
 
     /**
      * Called when a list view's items state bind mapping has changed.
@@ -231,6 +338,7 @@ public interface ListViewBindingListener
      * @param listView                      The list view whose binding has changed.
      * @param previousItemsStateBindMapping The previous bind mapping function for the items' state.
      */
-    public void itemsStateBindMappingChanged(ListView listView,
-        ListView.ItemStateBindMapping previousItemsStateBindMapping);
+    default public void itemsStateBindMappingChanged(ListView listView,
+        ListView.ItemStateBindMapping previousItemsStateBindMapping) {
+    }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/ListViewItemListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/ListViewItemListener.java?rev=1822015&r1=1822014&r2=1822015&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/ListViewItemListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/ListViewItemListener.java Tue Jan 23 15:31:39 2018
@@ -16,13 +16,48 @@
  */
 package org.apache.pivot.wtk;
 
+import org.apache.pivot.util.ListenerList;
+
 /**
  * List view item listener interface.
  */
 public interface ListViewItemListener {
     /**
+     * List view item listeners.
+     */
+    public static class Listeners extends ListenerList<ListViewItemListener>
+        implements ListViewItemListener {
+        @Override
+        public void itemInserted(ListView listView, int index) {
+            forEach(listener -> listener.itemInserted(listView, index));
+        }
+
+        @Override
+        public void itemsRemoved(ListView listView, int index, int count) {
+            forEach(listener -> listener.itemsRemoved(listView, index, count));
+        }
+
+        @Override
+        public void itemUpdated(ListView listView, int index) {
+            forEach(listener -> listener.itemUpdated(listView, index));
+        }
+
+        @Override
+        public void itemsCleared(ListView listView) {
+            forEach(listener -> listener.itemsCleared(listView));
+        }
+
+        @Override
+        public void itemsSorted(ListView listView) {
+            forEach(listener -> listener.itemsSorted(listView));
+        }
+    }
+
+    /**
      * List view item listener adapter.
+     * @deprecated Since 2.1 and Java 8 the interface itself has default implementations.
      */
+    @Deprecated
     public static class Adapter implements ListViewItemListener {
         @Override
         public void itemInserted(ListView listView, int index) {
@@ -56,7 +91,8 @@ public interface ListViewItemListener {
      * @param listView The source of the event.
      * @param index The index of the item that was inserted.
      */
-    public void itemInserted(ListView listView, int index);
+    default public void itemInserted(ListView listView, int index) {
+    }
 
     /**
      * Called when items have been removed from the list view.
@@ -66,7 +102,8 @@ public interface ListViewItemListener {
      * @param count The number of items that were removed, or <tt>-1</tt> if all
      * items were removed.
      */
-    public void itemsRemoved(ListView listView, int index, int count);
+    default public void itemsRemoved(ListView listView, int index, int count) {
+    }
 
     /**
      * Called when an item in the list view has been updated.
@@ -74,19 +111,22 @@ public interface ListViewItemListener {
      * @param listView The source of the event.
      * @param index The first index affected by the event.
      */
-    public void itemUpdated(ListView listView, int index);
+    default public void itemUpdated(ListView listView, int index) {
+    }
 
     /**
      * Called when the items in a list view have been cleared.
      *
      * @param listView The source of the event.
      */
-    public void itemsCleared(ListView listView);
+    default public void itemsCleared(ListView listView) {
+    }
 
     /**
      * Called when the items in a list view have been sorted.
      *
      * @param listView The source of the event.
      */
-    public void itemsSorted(ListView listView);
+    default public void itemsSorted(ListView listView) {
+    }
 }