2009-11-11 2 views
3

저는 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는

내가 지금 몇 시간 동안이 시도하고 돈 한 설정되어 있지 않은 경우 무엇이 잘못되었는지 보지 마라. 바라건대 여기 누군가가 나를 도울 수 있기를 바랍니다.

+0

해당 코드의 한 가지 분명한 문제는'Container '를 통한'JPanel'이 이미'PropertyChangeEvent's에 대해 설정되어 있다는 것입니다. 기존 방법을 무시하고 있습니까? JPanel의 확장은 대개 실수입니다 ('PropertyChangeListener'를 사용하는 것과 같습니다). –

+0

PropertyChangeListener와 호환되는 내 자신의 속성을 가져 오기 위해 메소드를 오버로드했습니다. 왜 JPanel을 확장하거나 PropertyChangeListener를 사용하는 것이 일반적인 실수입니까? – Ham

답변

6

당신이 말하는 모든 유일한 설명이 옳다면은

보고 몇 가지 흔적을 추가 ... 당신이 이렇게에는 이벤트가 발생하지 않습니다, 다시 경우, endDay에 대해 동일한 값을 설정하는 것이 경우의 값 ''오래된 '와 endDay '...

+0

글쎄, 이것이 완벽한 해결책이다. Java API를 자세히 살펴보면 이것도 설명 할 수 있지만 올바른 새로운 가치를 설정하지 않았다는 것을 결코 생각하지 못했다. 빠른 도움에 감사드립니다. – Ham

+1

+1 흥미 롭습니다. 나는 항상 오래된 가치를 지키려고했다! = 내 코드에서 새로운 가치. PropertyChangeSupport가이 작업을 수행 한 것을 알지 못했습니다. – Adamski

관련 문제