【问题标题】:JSpinner SpinnerDateModel questionJSpinner SpinnerDateModel 问题
【发布时间】:2010-08-13 15:21:30
【问题描述】:

我正在尝试创建一个 JSpinner 以使用户能够选择一个日期。我希望有一个日期下限和日期上限。我还希望初始值是日期下限。不幸的是,我的问题是它不会让我使用下限作为初始值(JSpinner 只是变得无响应)。这是我的代码:

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"));

如果我将初始值设置为下限之前或之后的一分钟,它可以正常工作。但就我的要求而言,我不希望那样。

帮助?

【问题讨论】:

  • 这不是您问题的直接答案,但您可能想尝试使用 NetBeans 中的 GUI 构建器。它为我节省了大量通过代码配置 Swing 组件的时间。在您的情况下,您可以创建一个 JSpinner 并从属性面板配置“模型”。
  • 也许它可以节省您的时间,但实际上我发现手动执行它更快(并且生成的代码更清晰/有条理)。无论如何,我看不出这将如何解决这个问题。
  • 不是你要找的,但是toedter.com/en/jcalendar/index.html有一个很好的开源数据选择器

标签: java swing date jspinner


【解决方案1】:

对我来说似乎是一个错误。我弄乱了一些代码,看来无论你传递给setValue,我都称它为value,它必须至少比minTime 大一个calendarField 单位。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 2013-05-14
    相关资源
    最近更新 更多