Java PropertyChangeSupport не запускается для разных свойств - PullRequest
3 голосов
/ 11 ноября 2009

Я разработал собственный javaBean для Swing. Теперь я пытаюсь поймать два свойства при изменении, используя PropertyChangeListener.

Проблема в том, что PropertyChangeSupport для одного из моих свойств в JavaBean работает нормально, но, похоже, он не запускает 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-Class есть еще немного кода, но я сократил его, чтобы сохранить его ясным. Я пытаюсь поймать эти 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 запускает propertyChange только при изменении startDay. Как только я меняю endDay, вызывается метод setEndDay, но, похоже, не вызывается propertyChange. Я зарегистрировал все события с помощью простых System.out.println (), чтобы увидеть, какие методы вызываются, и обнаружил следующее:

  • PropertyChangeListener добавлен правильно и работает при изменении startDay
  • setStartDay () и setEndDay () - методы вызываются правильно
  • когда вызывается setEndDay (), свойство propertyChangeEvent со свойством sourceSource "endDay" не устанавливается

Я пробовал это уже несколько часов и не понимаю, в чем дело. Надеюсь, кто-то здесь может мне помочь.

1 Ответ

6 голосов
/ 11 ноября 2009

Если все, что вы говорите правильно, единственное объяснение состоит в том, что вы снова устанавливаете то же значение для endDay, таким образом, событие не запускается ...

Добавьте некоторые трассировки, чтобы увидеть, являются ли значения 'old' и 'endDay' в методе setEndDay ...

...