提供听众支持“相对”简单。事实上它被简化了JComponent
暴露了它的EventListenerList
(listenerList
) as a protected
多变的。
In the ControlPane
,你需要一个添加方法......
public void addChangeListener(ChangeListener listener) {
listenerList.add(ChangeListener.class, listener);
}
你需要一个删除方法
public void removeChangeListener(ChangeListener listener) {
listenerList.remove(ChangeListener.class, listener);
}
现在,您需要某种方法来根据需要实际引发或触发事件......
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);
}
}
}
现在,当您想告诉注册听众ControlPane
状态已经改变,你只需调用fireStateChanged
, 例如...
public void actionPerformed(ActionEvent evt) {
fireStateChanged();
}
现在,在GamePane
,您需要注册一个ChangeListener
反对的例子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);
}
});
}
例如...