//------------------------------------------------------------------------------ // Creating and Consuming a Custom Event //------------------------------------------------------------------------------ // // In this example we have a class (SomeEntryList) that we want to raise events // when an item is added so that the consumer will know that it happened and // handle it/them accordingly. // //------------------------------------------------------------------------------ /* *================================================================================= * * IMPLEMENTING A CONSUMER OF THE EVENT * *================================================================================= */ SomeEntryList sel = new SomeEntryList(); // Register to receive EntryAddedEvents sel.addEntryAddedEventListener(new EntryAddedEventListener() { @Override public void OnEntryAdded(EntryAddedEvent evt) { // This is where we have our event handler logic String s = evt.getEntryText(); int i = evt.getNumInList(); DosSomethingWithSandI(s, i); } }); sel.AddEntries(200); /* *================================================================================= * * CREATING SomeEntryList CLASS --- EXPOSING THE OnEntryAdded Event * *================================================================================= */ public class SomeEntryList { /* * ------------------------------------------------------------------------- * This is where our class does something and raises our event ------------- * ------------------------------------------------------------------------- */ private java.util.ArrayList _entryList = new java.util.ArrayList<>(); public void AddEntries(int numToAdd) { String s; EntryAddedEvent eae; for (int i=1; i<=numToAdd; i++) { s = "Entry" + i.toString(); _entryList.add(s); /* * Here is where we're raising the event */ eae = new EntryAddedEvent(this, s, entryList.size()); this.fireOnEntryAddedEvent(eae); } } /* *================================================================================= * * THIS IS WHERE WE CREATE THE EVENT * *================================================================================= */ /* * ------------------------------------------------------------------------- * Create The Entry Added Event -------------------------------------------- * ------------------------------------------------------------------------- */ /* Declare the event (must extend EventObject) */ public class EntryAddedEvent extends java.util.EventObject { /* * Properties --- * These are available for use in the event handler */ private String _entryText = ""; public String getEntryText() { return _entryText; } private int _numInList = 0; public int getNumInList() { return _numInList; } /* * Constructor --- * "Object source" parameter and super(source) call are required */ public EntryAddedEvent(Object source, String entryText, int numInList) { super(source); _entryText = entryText; _numInList = numInList; } } /* * Declare the listener interface (must extend EventListener) */ public interface EntryAddedEventListener extends java.util.EventListener { public void OnEntryAdded(EntryAddedEvent evt); } /* * Create the event listener list and the methods to register/unregister listeners */ protected javax.swing.event.EventListenerList onEntryAddedListenerList = new javax.swing.event.EventListenerList(); public void addEntryAddedEventListener(EntryAddedEventListener listener) { onEntryAddedListenerList.add(EntryAddedEventListener.class, listener); } public void removeEntryAddedEventListener(EntryAddedEventListener listener) { onEntryAddedListenerList.remove(EntryAddedEventListener.class, listener); } /* * This private method is used to fire OnEntryAdded events */ void fireOnEntryAddedEvent(EntryAddedEvent evt) { Object[] listeners = onEntryAddedListenerList.getListenerList(); for (int i=0; i