저는 Swing 용으로 자체 javaBean을 개발했습니다. 이제 PropertyChangeListener를 사용하여 변경시 두 개의 속성을 잡으려고합니다.Java PropertyChangeSupport가 다른 속성에 대해 실행되지 않습니다.
JavaBean의 내 속성 중 하나에 대한 PropertyChangeSupport가 제대로 작동하지만 다른 선언 된 속성에 대해 propertyChange를 실행하지 않는 것 같습니다. 물론
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);
}
}
는 빈 클래스에서 좀 더 코드가하지만 난 분명히 그것을 유지하기 위해 잘라 :
JCalendar 콩 :
내가 당신에게 내 코드의 일부 추출물을 제공하자 . 나는이 같은 다른 클래스에 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는
내가 지금 몇 시간 동안이 시도하고 돈 한 설정되어 있지 않은 경우 무엇이 잘못되었는지 보지 마라. 바라건대 여기 누군가가 나를 도울 수 있기를 바랍니다.
해당 코드의 한 가지 분명한 문제는'Container '를 통한'JPanel'이 이미'PropertyChangeEvent's에 대해 설정되어 있다는 것입니다. 기존 방법을 무시하고 있습니까? JPanel의 확장은 대개 실수입니다 ('PropertyChangeListener'를 사용하는 것과 같습니다). –
PropertyChangeListener와 호환되는 내 자신의 속성을 가져 오기 위해 메소드를 오버로드했습니다. 왜 JPanel을 확장하거나 PropertyChangeListener를 사용하는 것이 일반적인 실수입니까? – Ham