Как удалить выделение для даты из IDateEvaluator после того, как она установлена ​​в JCalendar JDateChooser? - PullRequest
0 голосов
/ 27 сентября 2018

Я выделил нужные даты в JDateChooser (версия: jcalendar 1.4), добавив IDateEvaluator.Всякий раз, когда я добавляю новые записи, я выполняю этот класс, чтобы выделить новый набор дат.Это работает нормально.Но когда я удаляю запись, на ней все равно отображается соответствующая дата.можно ли это исправить?

моя основная функция:

    public void run() {
    HighlightEvaluator evaluator = new HighlightEvaluator();
     for(Date filled : getFilledDates())  {  
         evaluator.add(filled);
     }
     dateChooser.getJCalendar().getDayChooser().addDateEvaluator(evaluator);
}

мой класс оценщика:

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

    @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);
    }
}

функция run () запускается при каждой загрузке панели, проверяет наличие набора текстовых файлов в различных папках и выделяет эти даты

Вот моя функция getFilledDates ():

    private List<Date> getFilledDates() {
    List<Date> filledDates = new ArrayList<Date>();
    String filename = StorageSpace.currentpath;
    File folder = new File(filename);
    String[] yearfolders = folder.list(new FilenameFilter() {                   
        @Override
        public boolean accept(File dir, String name) {
            return new File(dir, name).isDirectory();
        }
    });
    for(int i=0; i<yearfolders.length;i++) {
        folder = new File(filename + "\\" + yearfolders[i]);
        if(folder.exists()) {
            String[] monthfolders = folder.list(new FilenameFilter() {                  
                @Override
                public boolean accept(File dir, String name) {
                    return new File(dir, name).isDirectory();
                }
            });
            for(int j=0;j<monthfolders.length;j++) {
                folder = new File(filename + "\\" + yearfolders[i] + "\\" + monthfolders[j]);
                if(folder.exists()) {
                    File[] listOfFiles = folder.listFiles();
                    for (int n = 0; n < listOfFiles.length; n++) {
                         Calendar c = Calendar.getInstance();
                         c.set(Calendar.YEAR, Integer.parseInt(yearfolders[i]));
                         c.set(Calendar.MONTH, Integer.parseInt(monthfolders[j])-1);
                         c.set(Calendar.DAY_OF_MONTH, Integer.parseInt(listOfFiles[n].getName().replaceAll(".txt", "")));
                         c.set(Calendar.HOUR_OF_DAY, 0);
                         c.set(Calendar.MINUTE, 0);
                         c.set(Calendar.SECOND, 0);
                         c.set(Calendar.MILLISECOND, 0);
                         filledDates.add(c.getTime());
                    }
                }
            }
        }
    }
    return filledDates;
}

Теперь каждый раз, когда файл добавляется, все папки и файлы сканируются снова и последний набор датвыделеныНо когда файл удален, дата по-прежнему отображается зеленым цветом, хотя эта конкретная дата отсутствует в списке, возвращаемом getFilledDates (), и она определенно не добавляется в оценщик.

Так что это моя проблема

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...