java属性更改侦听器

时间:2012-12-08 13:32:41

标签: java listener propertychangelistener

我需要处理两个班级之间的变化互动。

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?

1 个答案:

答案 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,因此需要保留属性更改支持。执行侦听的类是将侦听器添加到支持的类。