【问题标题】:How to highlight dates inside JCalendar in JDateChooser?如何在 JDateChooser 中突出显示 JCalendar 中的日期?
【发布时间】:2018-09-28 19:40:39
【问题描述】:

我正在使用来自外部库 toedter(jcalendar1.4) 的 JDateChooser 组件。我通过实现后来添加到 JDateChooser 组件的 IDateEvaluator 来使用自定义 DateEvaluator:

public static class HighlightEvaluator implements IDateEvaluator {
    private final List<Date> list = new ArrayList<>();
    public void add(Date date) {
        list.add(date);
    }

    public void remove(Date date) {
        list.remove(date);
    }

    public void setDates(List<Date> dates) {
        list.addAll(dates);
    }

    @Override
    public Color getInvalidBackroundColor() {
        return Color.BLACK;
    }

    @Override
    public Color getInvalidForegroundColor() {
        return null;
    }

    @Override
    public String getInvalidTooltip() {
        return null;
    }

    @Override
    public Color getSpecialBackroundColor() {
        return Color.GREEN;
    }

    @Override
    public Color getSpecialForegroundColor() {
        return Color.RED;
    }

    @Override
    public String getSpecialTooltip() {
        return "filled";
    }

    @Override
    public boolean isInvalid(Date date) {
        return false;
    }

    @Override
    public boolean isSpecial(Date date) {
        return list.contains(date);
    }
}

这是我的主要方法:

public static void main(){
JDateChooser dateChooser = new JDateChooser();    
List<Date> dates = new ArrayList<Date>();
dates.add(new Date());
HighlightEvaluator evaluator = new HighlightEvaluator();
evaluator.setDates(dates);
dateChooser.getJCalendar().getDayChooser().addDateEvaluator(evaluator);
}

现在代码应该突出显示当前日期,但它没有突出显示。请告诉解决方法

【问题讨论】:

    标签: java swing


    【解决方案1】:

    您需要稍微更改 Date 变量。当您创建一个 Date 变量时,它会获取当前日期月份年份以及时间(小时、分钟、秒、毫秒)

    但是,为 evaluator 设置相同的日期将不起作用,因为 evaluator 希望 date 没有时间详细信息。因此,您也可以在主函数中使用 Calendar 对象,如下所示:

    public static void main(){
    JDateChooser dateChooser = new JDateChooser();    
    List<Date> dates = new ArrayList<Date>();
    Calendar c = Calendar.getInstance();
    c.set(Calendar.YEAR, desiredyear);
    c.set(Calendar.MONTH, desiredmonth);
    c.set(Calendar.DAY_OF_MONTH, desiredday);
    c.set(Calendar.HOUR_OF_DAY, 0);
    c.set(Calendar.MINUTE, 0);
    c.set(Calendar.SECOND, 0);
    c.set(Calendar.MILLISECOND, 0);
    dates.add(c.getTime());
    HighlightEvaluator evaluator = new HighlightEvaluator();
    evaluator.setDates(dates);    
    dateChooser.getJCalendar().getDayChooser().addDateEvaluator(evaluator);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-11
      • 2018-07-06
      • 1970-01-01
      • 1970-01-01
      • 2016-09-30
      相关资源
      最近更新 更多