当前位置: 首页 > 面试题库 >

禁用多个日期范围jDateChooser

荣俊杰
2023-03-14
问题内容

我想在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");

第二个问题是恕我直言,这是一个错误,因为日期选择器似乎不设置过滤器,直到设置了新的日期,或者由于月/年更改而不得不重新粉刷。您可以将其更改为从8月到9月的日期:从9/11到9/15的日期将被禁用。要解决这种不便的行为,只需像这样显式设置当前日期:

JCalendar calendar = new JCalendar();
calendar.getDayChooser().addDateEvaluator(evaluator);
calendar.setDate(Calendar.getInstance().getTime());

旁注: 虽然此库非常有用,但它存在一些错误/设计问题,因此请随时寻求帮助。



 类似资料:
  • 问题内容: 源表如下: 我想得到以下输出: 我必须使用循环来填充此表吗? 谢谢 问题答案: 您可以使用技巧来查询 演示

  • 问题内容: 我的数据库中有以下一组匹配日期的日期(dd / MM / yyyy): 事件具有开始和结束日期(时间无关紧要),并且endDate为NULL表示事件仍在进行中。 我想确定的是两个任意日期之间的日期范围,其中a)没有事件,b)事件重叠。 因此,对于输入日期范围01/04/2009-30/06/2009,我希望得到以下结果: 注意,作为结果,两个相邻的重叠范围是可以接受的。 谁能用SQL算

  • 问题内容: 在MySQL中,如果我有日期范围的列表(范围开始和范围结束)。例如 我想检查另一个日期范围是否包含列表中已经存在的任何范围,我该怎么做? 例如 问题答案: 这是一个经典问题,如果您逆转逻辑,实际上会更容易。 让我举一个例子。 我将在此处发布一个时间段,以及其他时间段的所有不同变体以某种方式重叠。 另一方面,让我发布所有不重叠的内容: 因此,如果您简单地将比较简化为: 那么您将找到所有不

  • 问题内容: 场景是 用户 指定何时 可用 ,这些指定的时间可以 彼此重叠 。我正在尝试获取可用的总时间。SQL Fiddle示例: 输出应为130分钟: 我可以得到总的重叠分钟数,但是这比可用分钟数的总和还多: SQL小提琴 有什么想法可以实现这一目标吗? 编辑11月21日,11:到目前为止,感谢每个人的解决方案-从某种程度上来说,我很高兴看到这并不是编写一个“简单”的查询。 编辑11月23日 :

  • > 每个对象表示一个重复发生的事件。该事件可以在多个日期发生。因此,请考虑以下内容: 我有一个日历在客户端,用户可以选择一个日期范围。 > 对所选日期范围的每个条目进行调用,并在客户端处理聚合。问题是会有大量的读取,因为我们会多次读取重叠的日期范围内的同一个列表对象。 尝试使用类似ElasticSearch/Algolia的服务来完成此操作 任何建议都会很有帮助!

  • 问题内容: 我想将日期范围划分为各个月份。 例如-我有一个以以下方式包含数据的视图: 我希望能够以这种方式显示以上数据: 有人可以帮我吗? 问题答案: 下面的查询应该可以解决问题。该(该条款)动态生成一些月份的数据,我们可以使用它来加入反对。