将项目添加到索引 属性 - PropertyChangeSupport

Adding an item to an indexed property - PropertyChangeSupport

我目前正在使用 PropertyChangeListeners,我想知道是否建议在将对象添加(或删除,就此而言)到索引 [=26= 时触发 属性 更改] 例如 ArrayList。

public class SimpleBean implements Serializable
{
   private ArrayList<Matrix> mats;
   private PropertyChangeSupport pcs = new PropertyChangeSupport(this);

   public SimpleBean()
   {...}

   public void addMat(Matrix m)
   {
      pcs.firePropertyChange("mats", null, m); // I'm having trouble with the parameters
      mats.add(m);
   }

}

我正在阅读 PropertyChangeListener 教程,似乎在绑定 属性 的值发生变化时触发 属性 更改似乎是合适的。好吧,我不太确定这是否意味着我应该在 属性 被 any 修改时触发 属性 更改,或者仅当 属性(或 属性 的一个元素)严格地 set/reassigned 为不同的值。

在我的程序中,如果每次从垫子 ArrayList 中删除或添加元素时都可以更改几个 类,那将非常方便,我认为 PropertyChangeListener 可以在这方面帮助我。

如果不推荐使用此方法,以及其他 类 是否可以通过其他方式收听和响应 deletion/addition 索引属性,请告诉我。

参见以下示例:

public class SimpleBean implements Serializable {

    private ArrayList<Matrix> mats;
    private PropertyChangeSupport pcs = new PropertyChangeSupport(this);

    public void setMats(ArrayList<Matrix> mats) {
        if(mats.equals(this.mats))
            return;
        ArrayList<Matrix> oldMats = this.mats ;
        this.mats = mats ;
        pcs.firePropertyChange("mats", oldMats, mats);
    }

    public ArrayList<Matrix> getMats() {
        return mats;
    }

    public void setMat(int index, Matrix mat) {
        Matrix existing = index == mats.size() ? null : mats.get(index);
        if(existing.equals(mat))
            return;
        mats.remove(index);
        mats.add(index, mat);
        pcs.fireIndexedPropertyChange("mats", index, existing, mat);
    }

    public Matrix getMat(int index) {
        return mats.get(index);
    }

    public void addMat(Matrix m) {
        setMat(mats.size(), m);
    }

}

它实现了 mats 的 propertyChange 和 indexedPropertyChange。