我使用JDateChooser编辑表单中的日期。
简短版:我需要区分JDateChooser 上的用户日期编辑和编程属性更改。
解决方法:我找到了一个名为dateSelected的受保护 JDateChooser 属性,这正是我需要的(afaics 没有 getter),所以我可能必须创建自己的扩展 JDateChooser 类并为此属性创建一个 getter。这里的问题是我想让这个自定义版本可以从 Netbeans Palette 中拖动,而我的自定义 JDateChooser 不会。
长版: 首先我从数据库中获取日期,然后使用 JDateChooser 的 setDate() 方法在 GUI 中设置日期。当用户使用选择器选择新日期时,我想编辑数据库的日期。为此,我在 JDateChooser 对象上侦听 PropertyChange 事件(寻找“日期”更改)。在数据库中设置新日期后,我想刷新数据(我从数据库中获取整个记录)并从数据库中设置日期(如果有任何错误,它会被设置回数据库中的任何内容在这一刻)。
问题是,当我从数据库设置日期时,当用户更改日期时会触发相同的事件,然后我的“刷新”机制更新 JDateChooser 字段并且我得到无限循环。
我现有的(简化的)代码(netbeans):
private void dataStartuChooserPropertyChange(java.beans.PropertyChangeEvent evt) {
if ("date".equals(evt.getPropertyName())) {
JDateChooser wybieraczDat = (JDateChooser) evt.getSource();
updateDatabaseField(wybieraczDat.getDate());
}
}