我已经为Swing开发了一个自己的javaBean。现在我试图使用PropertyChangeListener来捕获更改的两个属性。Java PropertyChangeSupport不会触发不同的属性
问题是我的JavaBean中的某个属性的PropertyChangeSupport工作正常,但似乎没有为其他声明的属性触发任何propertyChange。
让我给你我的代码的一部分摘录:
JCalendar豆:
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级更多的代码,但我把它切以保持其清晰。 我试图抓住这些propertyChanges像这样在另一个阶级一个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方法被调用,但似乎没有propertyChange被触发。我已经记录的所有简单的System.out.println()秒才能看到的事件,这方法被调用,发现了以下工作:
- 的的PropertyChangeListener正确添加和当朝九特派改变
- 工作在setStartDay()和setEndDay() - 方法正确调用
- 时setEndDay()被调用时,与propertySource“endday指定”无PropertyChangeEvent的设置
我一直在尝试了一段时间和Don看看有什么不对。希望这里有人能帮助我。
该代码的一个明显问题是,通过Container的'JPanel'已经为'PropertyChangeEvent'设置。你是否覆盖现有的方法?扩展'JPanel'通常是一个错误(正如使用'PropertyChangeListener')。 –
为了让我自己的属性与PropertyChangeListener兼容,我覆盖了方法。为什么扩展JPanel或使用PropertyChangeListener是一个普遍的错误? – Ham