我目前正在使用PropertyChangeListeners,我想知道当一个对象被添加(或移除)到索引属性(如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教程,当绑定属性的值发生变化时,启动属性更改似乎是合适的。嗯,我不太确定这是否意味着,每当以任何方式修改属性时,或者只有当属性(或该属性的一个元素)被严格设置/重新分配到不同的值时,我才会触发属性更改。
在我的程序中,如果每次从mats ArrayList中移除或添加元素时,多个类都可以更改,我认为PropertyChangeListener可以在这方面帮助我。
如果不建议使用此方法,请告诉我,其他类是否可以通过另一种方式侦听和响应索引属性的删除/添加。
发布于 2015-08-07 10:49:57
请参见以下示例:
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);
}
}它既实现了propertyChange,也实现了mats的indexedPropertyChange。
https://stackoverflow.com/questions/31862642
复制相似问题