Java属性变化监听器

4
我需要处理两个类之间的交互变化。
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 "changes",那么我应该如何从子类中触发propertyChangeEvents呢?

1个回答

4

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(...);
  }


}

关键在于哪个类需要监听其状态?既然是子类,那么它就需要持有属性变化支持。而执行监听的类则是将监听器添加到该支持中的类。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接