我试图用不同的颜色在JCalendar中设置特定日期,具体取决于数据库中是否有针对该日期的计划,该日期在数据库中存储为“ yyyy-MM- dd”,我在这里看到过类似的帖子在stackOverflow上,但我无法使其正常工作。
我不确定“ component [day] .setBackground(Color.green)”的工作方式,以及如何将其设置为仅在数据库中已为其计划好的日期的日期
public void kalender() { Calendar cal = Calendar.getInstance(); cal.set(Calendar.DAY_OF_MONTH, 1); int offset = cal.get(Calendar.DAY_OF_WEEK); int mon = kalender.getMonthChooser().getMonth() + 1; int yr = kalender.getYearChooser().getYear(); JPanel jPanel = kalender.getDayChooser().getDayPanel(); Component component[] = jPanel.getComponents(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); String kalenderdatum = format.format(kalender.getDate()); System.out.println(kalenderdatum); String sql2 = "SELECT DATUM FROM MOTE"; try { Statement stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery(sql2); while (rs.next()) { String datumet = rs.getString("DATUM"); String aret = datumet.substring(0, 4); int year = Integer.parseInt(aret); String manaden = datumet.substring(5,7); int month = Integer.parseInt(manaden); String dagen = datumet.substring(8,10); int day = Integer.parseInt(dagen); if(yr == year && mon == month) { component[day].setBackground(Color.green); } }
使用JCalendar API的一种解决方案是创建您自己的实例,IDateEvaluator并检查日期中是否包含“特殊”内容。
IDateEvaluator
1.转换
首先,我建议将日期(yyyy-MM-dd)放入列表并将其转换为Date对象。例如:
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再次设置来刷新视图。例如:
JDayChooser
Calendar
JCalendar c = new JCalendar(); c.getDayChooser().addDateEvaluator(new SpecialDateEvaluator(specialDates)); c.setCalendar(Calendar.getInstance());
要查看此示例的完整示例(使用main方法),请参见示例gist。