使用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 somehowList<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());
要查看此示例的完整示例(使用main方法),请参见示例gist。



