Одним из решений, которое использует JCalendar API, является создание собственного экземпляра IDateEvaluator
и проверка, есть ли в дате что-то «особенное».
1.Преобразование
Сначала я предлагаю получить ваши даты (yyyy-MM-dd
) в список и преобразовать их в Date
объекты.Например:
List<String> mysqlDates = Arrays.asList("2019-02-14", "2019-03-06"); // Assume you've got this info somehow
List<Date> specialDates = convertToDates(mysqlDates);
С помощью следующей функции:
public static List<Date> convertToDates(List<String> dateStrings) throws ParseException {
List<Date> dates = new ArrayList<>();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
for (String dateString : dateStrings) {
dates.add(df.parse(dateString));
}
return dates;
}
2.Создайте свой SpecialDateEvaluator
Затем вам нужно создать свой собственный оценщик даты, который будет принимать Date
объектов, которые будут обрабатываться по-другому.Простым примером будет следующий:
public class SpecialDateEvaluator implements IDateEvaluator {
private final List<Date> specialDates;
public SpecialDateEvaluator(List<Date> specialDates) {
this.specialDates = specialDates;
}
@Override
public boolean isSpecial(Date date) {
for (Date d : specialDates) {
if (d.equals(date)) {
return true;
}
}
return false;
}
@Override
public Color getSpecialForegroundColor() {
return Color.black;
}
@Override
public Color getSpecialBackroundColor() {
return Color.red;
}
@Override
public String getSpecialTooltip() {
return null;
}
@Override
public boolean isInvalid(Date date) {
return false;
}
@Override
public Color getInvalidForegroundColor() {
return null;
}
@Override
public Color getInvalidBackroundColor() {
return null;
}
@Override
public String getInvalidTooltip() {
return null;
}
}
3.Используйте оценщик даты
Чтобы использовать оценщик, вам нужно добавить его к JDayChooser
, взяв список объектов Date
, а затем снова установив Calendar
, чтобы обновить представление.Например:
JCalendar c = new JCalendar();
c.getDayChooser().addDateEvaluator(new SpecialDateEvaluator(specialDates));
c.setCalendar(Calendar.getInstance());
Чтобы увидеть полный пример этого (с основным методом), см. этот пример gist .