Swing 用の独自の JavaBean を開発しました。今、PropertyChangeListener を使用して、変更時に 2 つのプロパティをキャッチしようとしています。
問題は、JavaBean 内のプロパティの 1 つの 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 を使用して、これらの propertyChanges をキャッチしようとします。
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 が適切に追加され、startDay が変更されたときに機能します
- setStartDay() および setEndDay() メソッドが適切に呼び出される
- setEndDay() が呼び出されると、propertySource「endDay」を持つ propertyChangeEvent は設定されません
これを数時間試してみましたが、何が問題なのかわかりません。うまくいけば、ここの誰かが私を助けてくれます。