JCalendar установить конкретные цвета даты

Я использую код из решения, чтобы установить цвета определенной даты в JCalendar toedter в Добавить конкретные цвета фона к датам JDaychooser. Проблема с этим решением состоит в том, что он устанавливает разные дни для каждого месяца, потому что первый день каждого месяца отличается.

в моем примере я добавил 4 мая и 4 сентября в arraylist событий.+9 со дня работы на май, но в сентябре он выберет 7 вместо этого, потому что первый день месяца начинается с +6.

Мне интересно, есть ли способ получить дату начала месяца, но я не могу найти метод, который делает это в документации API.

введите описание изображения здесь

Вот мой код:

Calendar cal = Calendar.getInstance();
cal.setTime(calendar.getDate());
int day = cal.get(Calendar.DAY_OF_MONTH);
int month = cal.get(Calendar.MONTH);
int year = cal.get(Calendar.YEAR);

JPanel jpanel = calendar.getDayChooser().getDayPanel();
Component component[] = jpanel.getComponents();

//arraylist of events
for(int i = 0; i < events.size(); i++)
{
    //selected month and year on JCalendar
    if(month == events.get(i).getMonth() && year == events.get(i).getYear())
    {
        //this value will differ from each month due to first days of each month
         component[ events.get(i).getDay() + 9 ].setBackground(Color.blue); 
    }
}

3 ответа

Решение

Вам необходимо получить смещение первого дня месяца. Анализируя календарь, вы знаете, что это связано с днем ​​недели.

Calendar cal = Calendar.getInstance();
cal.setTime(calendar.getDate());
int day = cal.get(Calendar.DAY_OF_MONTH);
int month = cal.get(Calendar.MONTH);
int year = cal.get(Calendar.YEAR);

JPanel jpanel = calendar.getDayChooser().getDayPanel();
Component component[] = jpanel.getComponents();

//arraylist of events
for(int i = 0; i < events.size(); i++)
{
    //selected month and year on JCalendar
    if(month == events.get(i).getMonth() && year == events.get(i).getYear())
    {
         // Calculate the offset of the first day of the month
         cal.set(Calendar.DAY_OF_MONTH,1);
         int offset = cal.get(Calendar.DAY_OF_WEEK) - 1;

        //this value will differ from each month due to first days of each month
         component[ events.get(i).getDay() + offset ].setBackground(Color.blue); 
    }
}

Имеет ли это смысл?

Что ж, простое решение состоит в том, что вам нужно получить каждую панель Dare в каландре, чтобы вы могли легко изменить ее цвет.

смотри следующий простой пример.

jPanel2 = jCalendar1.getDayChooser().getDayPanel();
Component component[] = jPanel2.getComponents();


  for (int i = 1; i <8 ; i++) {
         component[i].setBackground(Color.red);
    }

это поможет.

Я добавил константу для семи первых объектов панели (с воскресенья по субботу)

component[ events.get(i).getDay() + offset + 7].setBackground(Color.blue); 

и это сработало для меня

Другие вопросы по тегам