4

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をどのように起動する必要がありますか?

4

1 に答える 1

4

SubClass は、PropertyChangeSupport と、PropertyChangeListener を追加および削除するメソッドを取得します。thisSubClass の 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(...);
  }


}

キーは常に、どのクラスがその状態をリッスンする必要があるかです。それがサブクラスであるため、プロパティ変更サポートを保持する必要があります。リスニングを行うクラスは、リスナーをサポートに追加するクラスです。

于 2012-12-08T13:35:29.620 に答える