我已经开发了一个用于秋千的JavaBean。现在,我正尝试使用PropertyChangeListener捕获更改时的两个属性。
问题是,在JavaBean中,对我的一个属性的PropertyChangeSupport工作正常,但它似乎不会为另一个已声明的属性触发任何PropertyChange。
让我给你一些我的代码摘录:
JCalendar Bean:
public class JCalendar extends JPanel {
private int startDay, endDay;
private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);
public int getStartDay() {
return startDay;
}
public void setStartDay(int startDay) {
int old = this.startDay;
this.startDay = startDay;
this.pcs.firePropertyChange("startDay", old, startDay);
}
public int getEndDay() {
return endDay;
}
public void setEndDay(int endDay) {
int old = this.endDay;
this.endDay = endDay;
this.pcs.firePropertyChange("endDay", old, endDay);
}
}
当然bean类中还有更多的代码,但是为了保持清晰,我把它剪切了。
我尝试用另一个类中的PropertyChangeListener捕获这些属性更改,如下所示:
class markedDayListener implements PropertyChangeListener {
public void propertyChange(PropertyChangeEvent arg0) {
System.out.println(arg0.getPropertyName());
if(arg0.getPropertyName().equals("startDay")) {
// Do something
} else if(arg0.getPropertyName().equals("endDay")) {
// Do something
}
}
}
到目前为止,我觉得一切都是对的。但出于某种原因,PropertyChangeSupport仅在StartDay更改时激发PropertyChange。只要更改endday,就会调用setendday方法,但似乎没有要激发的属性更改。我已经使用简单的system.out.println()记录了所有事件,以便查看调用了哪些方法并发现了以下内容:
-
PropertyChangeListener已正确添加,并在StartDay更改时工作。
-
正确调用setStartDay()和setEndDay()-方法
-
调用set endday()时,未设置具有propertysource“endday”的propertyChangeEvent
我已经试了几个小时了,不知道怎么了。希望这里有人能帮助我。