JCalendar设置特定的日期颜色

时间:2013-05-23 01:51:04

标签: java swing jcalendar

我正在使用解决方案中的代码在Add specific background colors to JDaychooser Dates的toedter的JCalendar中设置特定日期的颜色。此解决方案的问题在于它为每个月设置了不同的日期,因为每个月的第一天是不同的。

在我的例子中,我添加了5月4日和9月4日的事件arraylist。+ 9从5月开始工作,但在9月它将选择7而不是因为该月的第一天从+6开始。

我想知道是否有办法获得本月的开始日期,但我似乎找不到在API文档中执行此操作的方法。

enter image description here

继承我的代码:

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 个答案:

答案 0 :(得分: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); 
    }
}

这有意义吗?

答案 1 :(得分:0)

我为面板的七个第一个对象(周日到周六)添加了一个常量

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

它对我有用

答案 2 :(得分:0)

一个简单的解决方案就是你必须在Calender中获得每个Dare面板然后你可以轻松地改变它的颜色。

看下面简单的例子。

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


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

这会有所帮助。