2013-05-23 5 views
0

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

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

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

enter image description here

Heres мой код:

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); 
    } 
} 
+0

В качестве альтернативы, реализуйте 'IDateEvaluator', как показано [здесь] (http://stackoverflow.com/a/37899883/230513). – trashgod

ответ

2

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

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

Это имеет смысл?

+0

Спасибо, это работает :) – user2273278

+0

Рад, что он работает, так как он не был протестирован, пожалуйста! –

+0

Имеет ли это смысл ?, да, но еще одна причина, по которой я использовал только источник кода, чтобы не извлекать методы или JComponents из скомпилированной банки – mKorbel

0

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

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

и он работал на меня

0

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

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

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


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

это поможет.