Я выделил нужные даты в 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 (), и она определенно не добавляется в оценщик.
Так что это моя проблема