Цвет фона на определенные даты с использованием JCalendar - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь установить определенные даты в моем 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);
            }

            }

1 Ответ

0 голосов
/ 15 февраля 2019

Одним из решений, которое использует 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 .

...