2010-08-13 133 views
1

我正在尝试创建一个JSpinner以使用户能够选择一个日期。我想要有一个较低的日期限制和一个较高的日期限制。我也希望初始值是较低的日期限制。不幸的是,我的问题是,它不会让我使用下限作为初始值(JSpinner简直没有反应)。这是我的代码:JSpinner SpinnerDateModel问题

SpinnerDateModel model = new SpinnerDateModel(); 
model.setStart(minTime); //lower limit 
model.setEnd(maxTime); //upper limit 
model.setValue(minTime); //doesn't like this! 
model.setCalendarField(Calendar.MINUTE); 
JSpinner timePicker = new JSpinner(model); 
timePicker.setEditor(new JSpinner.DateEditor(timePicker, "HH:mm dd/MM/yy")); 

如果我将初始值设置为下限之前或之后的一分钟,它工作正常。但对于我的要求,我不希望这样。

帮助?

+0

这不是您的问题的直接答案,但您可能想尝试在NetBeans中使用GUI构建器。它通过代码配置摆动组件为我节省了很多时间。在你的情况下,你可以创建一个JSpinner并从属性面板配置“模型”。 – 2010-08-13 17:02:21

+0

也许它可以节省您的时间,但我实际上更快速地找到它(以及由此产生的代码更加清洁/有组织)并手动执行。无论如何,我看不出如何解决这个问题。 – 2010-08-13 18:54:26

+0

不完全符合您的要求,但在http://www.toedter.com/en/jcalendar/index.html有一个可爱的开源数据选取器 – Andy 2010-08-31 22:20:33

回答

2

看起来像一个bug给我。我搞砸了一些代码,看起来无论你传递给setValue,我将其称为value,必须至少有一个calendarField单位大于minTime

即,如果您使用过model.setCalendarField(Calendar.YEAR),value必须是2011年的任何日期,假设您在2010年使用了日期为minTime

根据Sun的说法,由SpinnerDateModel构造函数强制的不变量是minimum <= value <= maximum,所以这个问题不应该发生。

想到的第一个解决方法是创建一个自定义SpinnerDateModel,它会覆盖getPreviousValue()setValue()方法手动检查您想要的minTime