Is there any preexisting class that helps support add/remove EventListener operations? (kind of like PropertyChangeSupport)
I'm trying to partition my code into a model and view in Java. I have some data that arrives erratically, and would like the model to support some kind of EventListener so that a view can subscribe to changes in the model. The data is numerous + complicate开发者_开发问答d enough that I don't want to have to do the whole fine-grained Javabeans property change support; rather I would just like to allow notification that the model has changed in a coarse way.
how can I best do this?
I would handle that with a ChangeEvent. It's just an indication that something has changed.
As for implementing the add/remove/fire functionality. There is no mechanism like PropertyChangeSupport, but the code is simple enough there's not really a need for it.
private final EventListenerList listenerList = new EventListenerList();
private final ChangeEvent stateChangeEvent = new ChangeEvent(this);
public void addChangeListener(ChangeListener l) {
listenerList.add(ChangeListener.class, l);
}
public void removeChangeListener(ChangeListener l) {
listenerList.remove(ChangeListener.class, l);
}
protected void fireChange() {
for (ChangeListener l: listenerList.getListeners(ChangeListener.class)) {
l.stateChanged(stateChangeEvent);
}
}
Note: JComponent provides a protected listenerList
object for use by sub-classes.
I'm not sure if that answers your question, but you could use a javax.swing.event.EventListenerList
, it supports add() and remove() operations for your listeners. Then you can iterate over a particular listener subclass to fire events:
for (MyListener listener : listenerList.getListeners(MyListener.class) {
listener.fireEvent(...);
}
For this you can use the EventListenerSupport class offered by the Apache Commons Lang library. It's mature, battle-tested code.
精彩评论