import java.awt.; import javax.swing.; import java.time.*; public class CalendarPanel extends JPanel { GiveCalendar calendar; LocalDate[]dataArrays; public LocalDate currentDate; String name[]={"日","一","二","三","四","五","六"}; public CalendarPanel(){ calendar = new GiveCalendar(); currentDate = LocalDate.now(); dataArrays = calendar.getCalendar(currentDate); showCalendar(dataArrays);} public void showCalendar(LocalDate [] dataArrays){ removeAll(); GridLayout grid = new GridLayout(7,7); setLayout(grid); JLabel [] titleWeek = new JLabel[7]; JLabel [] showDay = new JLabel[42]; for(int i=0;i<7;i++){ titleWeek[i] = new JLabel(name[i],JLabel.CENTER); add(titleWeek[i]);} for(int i=0;i<42;i++){ showDay[i] = new JLabel("",JLabel.CENTER);} for(int k=7, i=0;k<49;k++,i++){ add(showDay[i]);} int space = printSpace(dataArrays[0]. getDayOfWeek()); for(int i=0,j=space+ i;i<dataArrays.length;i++,j++){ showDay[j].setText(""+ dataArrays[i].getDayOfMonth());} repaint();} public void setNext(){ currentDate = currentDate. plusMonths(1); dataArrays = calendar.getCalendar(currentDate); showCalendar(dataArrays);} public void setPrevious(){ currentDate = currentDate. plusMonths(-1); dataArrays = calendar. getCalendar(currentDate); showCalendar(dataArrays);} public int printSpace(DayOfWeek x){ int n = 0; switch(x){ case SUNDAY: n=0; break; case MONDAY: n=1; break; case TUESDAY: n=2; break; case WEDNESDAY:n= 3; break; case THURSDAY:n=4; break; case FRIDAY:n=5; break; case SATURDAY:n=6; break;} return n;} }
时间: 2024-04-26 21:20:11 浏览: 95
jsb.zip_awt_event_import java.awt._java 记事本
这段代码定义了一个名为 CalendarPanel 的 JPanel,它继承了 JPanel 类,并使用了 Java Swing 库中的 JLabel、GridLayout 等组件来显示一个日历控件。它还使用了一个名为 GiveCalendar 的自定义类来生成日历数据。
在 CalendarPanel 类中,定义了一个 currentDate 变量,表示当前的日期,它的初始值为当前的系统日期。在构造函数中,调用了 GiveCalendar 类的 getCalendar 方法来获取当前日期对应的日历数据,并调用 showCalendar 方法来显示日历控件。
showCalendar 方法使用 GridLayout 布局来排列日历控件的各个部分,包括星期名称和日期单元格。它通过一个 for 循环来创建并添加 JLabel 组件,用来显示星期名称和日期。其中,星期名称使用了字符串数组 name 中的内容,日期使用 dataArrays 数组中的内容。为了使日期单元格能够居中显示,使用了 JLabel.CENTER 对齐方式。
setNext 和 setPrevious 方法分别用于切换到下一个月和上一个月。它们通过调用 LocalDate 类的 plusMonths 方法来实现日期的加减,然后再调用 showCalendar 方法更新日历控件。
printSpace 方法用于计算当前月份第一天是星期几,以便在日历控件中正确地显示日期。它使用了 Java 8 中新增的枚举类型 DayOfWeek 来表示星期几,通过 switch 语句来映射星期几与整数之间的关系。
阅读全文