2009-11-11 18 views
3

我已经为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看看有什么不对。希望这里有人能帮助我。

+0

该代码的一个明显问题是,通过Container的'JPanel'已经为'PropertyChangeEvent'设置。你是否覆盖现有的方法?扩展'JPanel'通常是一个错误(正如使用'PropertyChangeListener')。 –

+0

为了让我自己的属性与PropertyChangeListener兼容,我覆盖了方法。为什么扩展JPanel或使用PropertyChangeListener是一个普遍的错误? – Ham

回答

6

如果你说的是对的唯一解释是,你重新设置为endday指定的值相同,因此不会触发事件...

添加一些痕迹,看是否值“老”和' endDay'方法setEndDay ...

+0

嗯,这是一个完美的解决方案:) 深入研究Java API也可以解释这一点,但我永远不会认为我没有设置正确的新值。 非常感谢您的快速帮助! – Ham

+1

+1有趣。我总是防守旧的价值!=在我的代码中的新价值。没有意识到PropertyChangeSupport为你做了这个。 – Adamski

相关问题