2010-08-13 128 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