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);
и это сработало для меня