Java JCalendar设置特定的日期颜色

Java JCalendar设置特定的日期颜色,java,swing,jcalendar,Java,Swing,Jcalendar,我使用解决方案中的代码在toedter的JCalendar中设置特定日期的颜色。这个解决方案的问题是,它为每个月设置了不同的日期,因为每个月的第一天是不同的 在我的示例中,我在events arraylist中添加了5月4日和9月4日。从5月的工作日开始+9,但在9月,它将选择7,因为该月的第一天从+6开始 我想知道是否有一种方法可以得到这个月的开始日期,但我似乎在API文档中找不到一种方法可以做到这一点 这是我的密码: Calendar cal = Calendar.getInstance(

我使用解决方案中的代码在toedter的JCalendar中设置特定日期的颜色。这个解决方案的问题是,它为每个月设置了不同的日期,因为每个月的第一天是不同的

在我的示例中,我在events arraylist中添加了5月4日和9月4日。从5月的工作日开始+9,但在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); 
    }
}
Calendar cal=Calendar.getInstance();
cal.setTime(calendar.getDate());
int day=cal.get(日历日/月日);
int month=cal.get(日历月);
int year=cal.get(日历年);
JPanel JPanel=calendar.getDayChooser().getDayPanel();
Component Component[]=jpanel.getComponents();
//事件列表
对于(int i=0;i
您需要的是获得每月第一天的偏移量。分析日历,你知道这与星期几有关

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); 
    }
}
Calendar cal=Calendar.getInstance();
cal.setTime(calendar.getDate());
int day=cal.get(日历日/月日);
int month=cal.get(日历月);
int year=cal.get(日历年);
JPanel JPanel=calendar.getDayChooser().getDayPanel();
Component Component[]=jpanel.getComponents();
//事件列表
对于(int i=0;i

这有意义吗?

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


这对我来说很有效,一个简单的解决办法是,你必须在日历上得到每一块Dare,然后你可以很容易地改变它的颜色

下面是一个简单的例子

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


  for (int i = 1; i <8 ; i++) {
         component[i].setBackground(Color.red);
    }
jPanel2=jCalendar1.getDayChooser().getDayPanel();
Component Component[]=jPanel2.getComponents();

对于(inti=1;我这样做有意义吗?),是的,但这是我仅使用代码源不从编译的JAR中提取方法或JComponents的另一个原因。或者,实现
IDateEvaluator
,如图所示。
jPanel2 = jCalendar1.getDayChooser().getDayPanel();
Component component[] = jPanel2.getComponents();


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