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 + complicated 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?
An event listener in Java is designed to process some kind of event — it "listens" for an event, such as a user's mouse click or a key press, and then it responds accordingly. An event listener must be connected to an event object that defines the event.
As we mentioned before, Swing provides three generally useful top-level container classes: JFrame , JDialog , and JApplet .
In Java Swing, there are a number of components like a scroll bar, button, text field, text area, checkbox, radio button, etc. All these components together, form a GUI that offers a rich set of functionalities and also allows high-level customization.
Listeners that All Swing Components Support Because all Swing components descend from the AWT Component class, you can register the following listeners on any Swing component: component listener. Listens for changes in the component's size, position, or visibility. focus listener.
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(...);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With