【问题标题】:Disable past dates and 2 weeks from now in JCalendar在 JCalendar 中禁用过去的日期和 2 周后
【发布时间】:2014-10-12 03:07:30
【问题描述】:

我想从 JCalendar 禁用过去的日期和 2 周后。

我已经有了这个代码:

jDateChooser1.getJCalendar().setMinSelectableDate(new Date());
((JTextFieldDateEditor)jDateChooser1.getDateEditor()).setEditable(false);

我已经可以禁用过去的日期,但如何禁用未来的日期,比如从现在起 2 周?

【问题讨论】:

  • 您使用的是哪个日期 API?是 JAVA 日期 API 吗?
  • 它是 JCalendar API :)

标签: java swing jcalendar jdatechooser


【解决方案1】:

here 所示,您可以使用IDateEvaluatorMinMaxDateEvaluator 使日期范围无效:

private static class RangeEvaluator extends MinMaxDateEvaluator {

    @Override
    public boolean isInvalid(Date date) {
        return !super.isInvalid(date);
    }
}

然后您可以指定无效日期的范围,例如前一天和后两周:

    Calendar min = Calendar.getInstance();
    min.add(Calendar.DAY_OF_MONTH, -1);
    Calendar max = Calendar.getInstance();
    max.add(Calendar.DAY_OF_MONTH, 13);
    RangeEvaluator re = new RangeEvaluator();
    re.setMinSelectableDate(min.getTime());
    re.setMaxSelectableDate(max.getTime());
    JCalendar jc = new JCalendar();
    jc.getDayChooser().addDateEvaluator(re);
    jc.setCalendar(jc.getCalendar());

请注意,您可以添加多个 RangeEvaluator 实例来处理不同的范围。

【讨论】:

    【解决方案2】:

    我没有尝试过,但我想使用未来的日期会这样做:

    Date d = new Date();
    d.setTime(d.getTime() + 14 * 86400 * 1000); -- set the date 14 days forward
    jDateChooser1.getJCalendar().setMinSelectableDate(d);
    ((JTextFieldDateEditor)jDateChooser1.getDateEditor()).setEditable(false);
    

    您可能希望使用适当的 Calendar 对象,而不是使用 Date 对象并且必须使用 setTime(milliseconds),它具有更好的方法来更改日期等。

    Calendar cal = Calendar.getInstance();
    calendar.add(Calendar.DAY_OF_YEAR, 14);
    Date twoweeks = calendar.getTime();
    

    【讨论】:

      【解决方案3】:

      我已经在垃圾神代码的帮助下回答了我自己的问题。

      这里:

      Calendar min = Calendar.getInstance();
      min.add(Calendar.DAY_OF_MONTH, 15);
      Calendar max = Calendar.getInstance();
      max.add(Calendar.DAY_OF_MONTH, 2000000);
      RangeEvaluator re = new RangeEvaluator();
      re.setMinSelectableDate(min.getTime());
      re.setMaxSelectableDate(max.getTime());
      // JCalendar jc = new JCalendar();
      
      
       jDateChooser1.getJCalendar().setMinSelectableDate(min.getTime());
       jDateChooser1.getJCalendar().setMaxSelectableDate(max.getTime());
      ((JTextFieldDateEditor)jDateChooser1.getDateEditor()).setEditable(false);
      

      谢谢! :D

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-29
        • 2015-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-15
        相关资源
        最近更新 更多