我需要处理两个班级之间的变化互动。
public class HeadClass {
private Subclass sub;
public void refresh() {...}
}
public class Subclass{
ArrayList store;
public void add(T data)
store.add(data);
firePropertyChange(...);
}
每当调用子类中的方法“add”时,应调用HeadClass中的方法“refresh”! 但是我应该在哪个类中实现这一行:
private PropertyChangeSupport changes = new PropertyChangeSupport(/*WHAT SHOULD BE HERE?*/);
如果我在HeadClass中实现它,我可以这样做:
changes.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent event) {
refresh();
}
});
但是,如果我无法访问propertyChangeSupport“更改”,我该如何从子类中触发propertyChangeEvents?
答案 0 :(得分:3)
SubClass获取PropertyChangeSupport,以及添加和删除PropertyChangeListener的方法。您可以将this
传递给SubClass的PropertyChangeSupport构造函数。
public class Subclass{
private PropertyChangeSupport propChangeSupport =
new PropertyChangeSupport(this);
private ArrayList store;
public void addPropertyChangeListener(PropertyChangeListener listener) {
propChangeSupport.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
propChangeSupport.removePropertyChangeListener(listener);
}
public void add(T data)
store.add(data);
propChangeSupport.firePropertyChange(...);
}
}
密钥始终是哪个类需要监听其状态?由于这是SubClass,因此需要保留属性更改支持。执行侦听的类是将侦听器添加到支持的类。