我目前正在使用 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 教程,似乎每当绑定(bind)属性的值发生变化时就触发属性更改是合适的。好吧,我不太确定这是否意味着每当通过任何方式修改属性时我应该触发属性更改,或者仅当严格设置属性(或该属性的元素)时/重新分配给不同的值。
在我的程序中,如果每次从 mats ArrayList 中删除或添加元素时都可以更改多个类,那将非常方便,并且我认为 PropertyChangeListener 可以在这方面帮助我。
如果不建议使用此方法,以及是否有其他方法可以让其他类监听并响应对索引属性的删除/添加,请告诉我。
最佳答案
请参阅以下示例:
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。
关于java - 将项目添加到索引属性 - PropertyChangeSupport,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31862642/