Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在JDateChooser中突出显示JCalendar中的日期?_Java_Swing - Fatal编程技术网

Java 如何在JDateChooser中突出显示JCalendar中的日期?

Java 如何在JDateChooser中突出显示JCalendar中的日期?,java,swing,Java,Swing,我使用的是一个来自外部库toedter(jcalendar1.4)的JDateChooser组件。我通过实现IDateEvaluator使用了自定义DateEvaluator,IDateEvaluator后来添加到JDateChooser组件中: public static class HighlightEvaluator implements IDateEvaluator { private final List<Date> list = new ArrayList<

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

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);
    }
}
公共静态类HighlightEvaluator实现IDateEvaluator{
私有最终列表=新的ArrayList();
公共作废添加(日期){
列表。添加(日期);
}
公共作废删除(日期){
删除(日期);
}
公共作废设置日期(列表日期){
列表。添加所有(日期);
}
@凌驾
公共颜色getInvalidBackroundColor(){
返回颜色:黑色;
}
@凌驾
公共颜色getInvalidForegroundColor(){
返回null;
}
@凌驾
公共字符串getInvalidTooltip(){
返回null;
}
@凌驾
公共颜色getSpecialBackroundColor(){
返回颜色。绿色;
}
@凌驾
公共颜色getSpecialForegroundColor(){
返回颜色:红色;
}
@凌驾
公共字符串getSpecialTooltip(){
返回“已填写”;
}
@凌驾
公共布尔值isInvalid(日期){
返回false;
}
@凌驾
公共布尔值是特殊的(日期){
返回列表。包含(日期);
}
}
这是我的主要方法:

publicstaticvoidmain(){
JDateChooser dateChooser=新的JDateChooser();
列表日期=新建ArrayList();
添加(新日期());
HighlightEvaluator evaluator=新的HighlightEvaluator();
评估者。设定日期(日期);
dateChooser.getJCalendar().getDayChooser().addDateEvaluator(evaluator);
}

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

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

不过,将同一日期设置为evaluator将不起作用,因为evaluator希望该日期并没有时间详细信息。因此,您也可以在主功能中使用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);
}
publicstaticvoidmain(){
JDateChooser dateChooser=新的JDateChooser();
列表日期=新建ArrayList();
Calendar c=Calendar.getInstance();
c、 设置(日历年、期望年);
c、 设置(日历月、期望月);
c、 设置(日历日/月/日,所需日期);
c、 设置(日历小时/天,0);
c、 设置(日历分钟,0);
c、 设置(日历秒,0);
c、 设置(日历毫秒,0);
dates.add(c.getTime());
HighlightEvaluator evaluator=新的HighlightEvaluator();
评估者。设定日期(日期);
dateChooser.getJCalendar().getDayChooser().addDateEvaluator(evaluator);
}
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);
}