package com.bagri.tools.vvm.event; import javax.swing.event.EventListenerList; public class EventBus <E extends Event> { private EventListenerList listeners = new EventListenerList(); public <T extends EventHandler<E>> void addEventHandler(T handler) { if (null == handler) { return; } listeners.add((Class<T>) handler.getClass(), handler); } public <T extends EventHandler<E>> void removeEventHandler(T handler) { if (null == handler) { return; } listeners.remove((Class<T>) handler.getClass(), handler); } // Notify all listeners that have registered interest for // notification on this event type. The event instance // is lazily created using the parameters passed into // the fire method. public void fireEvent(E evt) { if (null == evt) { return; } // Guaranteed to return a non-null array Object[] listenersArray = listeners.getListenerList(); // Process the listeners last to first, notifying // those that are interested in this event for (int i = listenersArray.length-2; i>=0; i-=2) { // if (listenersArray[i] == ApplicationEventListener.class) { ((EventHandler<E>)listenersArray[i+1]).handleEvent(evt); // } } } }