禁用多个日期范围jDateChooser
我想在JCalendar上禁用多个日期范围。 我正在执行这些步骤 ,但我需要知道如何添加多个日期评估程序。 请帮帮我,谢谢。
更新:我不知道为什么我无法禁用JCalendar上的日期。 我会把我的代码留在这里,以便你们可以检查它。
这是我的RangeEvaluator类,从这个类修改。
class RangeEvaluator implements IDateEvaluator { private DateUtil dateUtil = new DateUtil(); @Override public boolean isSpecial(Date date) { return false; } @Override public Color getSpecialForegroundColor() { return null; } @Override public Color getSpecialBackroundColor() { return null; } @Override public String getSpecialTooltip() { return null; } @Override public boolean isInvalid(Date date) { return dateUtil.checkDate(date); // if the given date is in the range then is invalid } /** * Sets the initial date in the range to be validated. * @param startDate */ public void setStartDate(Date startDate) { dateUtil.setMinSelectableDate(startDate); } /** * @return the initial date in the range to be validated. */ public Date getStartDate() { return dateUtil.getMinSelectableDate(); } /** * Sets the final date in the range to be validated. * @param endDate */ public void setEndDate(Date endDate) { dateUtil.setMaxSelectableDate(endDate); } /** * @return the final date in the range to be validated. */ public Date getEndDate() { return dateUtil.getMaxSelectableDate(); } @Override public String getInvalidTooltip() { return null; } @Override public Color getInvalidBackroundColor() { return null; } @Override public Color getInvalidForegroundColor() { return null; } }
以下是我使用RangeEvaluator类的方法:
RangeEvaluator evaluator = new RangeEvaluator(); SimpleDateFormat dateFormat = new SimpleDateFormat("dd-mm-yyyy"); evaluator.setStartDate(dateFormat.parse("11-09-2014")); evaluator.setEndDate(dateFormat.parse("15-09-2014")); jCalendar1.getDayChooser().addDateEvaluator(evaluator);
我错过了什么吗? 请帮帮我,谢谢。
根据您的更新,这里发生了两件事。
首先是你的SimpleDateFormat实例化时的一个小错误:
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-mm-yyyy");
在这种模式中,“mm”是指分钟而不是几个月 。 它应该是:
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
第二个问题是恕我直言,因为日期选择器似乎不会应用filter,直到设置新的日期或因为月/年更改而必须重新绘制。 你可以测试它改变月份到8月然后回到9月:9月11日到9月15日的日期将被禁用。 要解决这个不方便的行为,只需明确地设置当前日期:
JCalendar calendar = new JCalendar(); calendar.getDayChooser().addDateEvaluator(evaluator); calendar.setDate(Calendar.getInstance().getTime());
旁注:虽然这个库非常有用但它有一些bug /设计问题所以请不要犹豫,寻求帮助。
只需为您创建的每个RangeEvaluator
调用addDateEvaluator()
。 这会将RangeEvaluator
添加到RangeEvaluator
中的List dateEvaluators
JDayChooser
。 之后, JDayChooser
在决定如何绘制日期按钮时迭代列表。
编辑:这是我使用的RangeEvaluator
。
private static class RangeEvaluator extends MinMaxDateEvaluator { @Override public boolean isInvalid(Date date) { return !super.isInvalid(date); } }
这就是我如何使用它。
RangeEvaluator re = new RangeEvaluator(); re.setMinSelectableDate(...); re.setMaxSelectableDate(...); JCalendar jc = new JCalendar(); jc.getDayChooser().addDateEvaluator(re);
我注意到的一个问题是你必须告诉JDayChooser
使用新的评估器重新配置它的按钮。 您可以触发属性更改事件或仅更改绑定属性。
jc.setCalendar(jc.getCalendar());