繁体   English   中英

使用JCalendar在特定日期的背景色

[英]Background color on specific dates using JCalendar

我正在尝试以不同的颜色在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实例,并检查日期中是否有“特殊”的东西。

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());

要查看此示例的完整示例(使用main方法),请参见示例gist

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM