Providing listener support is "relatively" simple. It's simplified by the fact the JComponent
exposes it's EventListenerList
(listenerList
) as a protected
variable.
In the ControlPane
, you'll need an add method...
public void addChangeListener(ChangeListener listener) {
listenerList.add(ChangeListener.class, listener);
}
You'll need a remove method
public void removeChangeListener(ChangeListener listener) {
listenerList.remove(ChangeListener.class, listener);
}
Now, you need some way to actually raise or fire events as needed...
protected void fireStateChanged() {
ChangeListener[] listeners = listenerList.getListeners(ChangeListener.class);
if (listeners != null && listeners.length > 0) {
ChangeEvent evt = new ChangeEvent(evt);
for (ChangeListener listener : listeners) {
listener.stateChanged(evt);
}
}
}
Now, when ever you want to tell registered listeners that the ControlPane
state has changed, you would simply call fireStateChanged
, for example...
public void actionPerformed(ActionEvent evt) {
fireStateChanged();
}
Now, in the GamePane
, you will need to register a ChangeListener
against the instance of the ControlPane
...
private ControlPane cp;
private HangManPane hangManPane;
//...
public GamePane() {
cp = new ControlPane();
hangManPane = new HangManPane(null);
cp.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent evt) {
String secret = cp.getSecretWord();
DefaultHangManModel model = new DefaultHangManModel(secret);
hangManPane.setModel(model);
}
});
}
For example...