【问题标题】:java property change listenerjava属性变化监听器
【发布时间】:2012-12-08 13:32:41
【问题描述】:

我需要处理 2 个类之间的更改交互。

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??

【问题讨论】:

    标签: java listener propertychangelistener


    【解决方案1】:

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

    关键始终是需要监听哪个类的状态?既然是子类,那么就需要持有属性变更支持。进行侦听的类是将侦听器添加到支持的类。

    【讨论】:

      猜你喜欢
      • 2017-05-16
      • 2011-06-13
      • 1970-01-01
      • 2023-02-08
      • 1970-01-01
      • 1970-01-01
      • 2017-04-19
      • 1970-01-01
      相关资源
      最近更新 更多