java如何检测用户是否更改了JDateChooser日期,而不是设置日期属性的任何其他内容?
我使用JDateChooser编辑表单中的日期
短版本:我需要在JDateChooser上区分用户日期编辑和程序属性更改
解决方法:我发现了一个名为dateSelected的受保护JDateChooser属性,这正是我所需要的(因为没有getter),所以我可能必须创建自己的扩展JDateChooser类,并为此属性创建一个getter。这里的问题是,我想让这个自定义版本可以从Netbeans调色板中拖动,而我的自定义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());
}
}
# 1 楼答案
我会在这里回答我自己,因为我找到了一种疯狂的方式来做这件事(这可能是毫无价值的,但对我的需求来说很好)。我不会创建一个完整的工作示例,因为我没有时间。还有一些人可能会受益
要检查日期是由用户选择的还是在JDateChooser的
PropertyChangeEvent
中通过编程设置的,我检查JDateChooser
的名为dateSelected
的私有字段。在我做了任何需要的事情(修改数据库)之后,我将这个字段设置回false
,因为否则它将保持true
,即使日期再次以编程方式更改。下面的示例代码(未优化,丑陋,只是为了演示我所做的)# 2 楼答案
我正在使用ActionListener