在论坛里面看到的,觉得挺好,具有参考价值。 直接将两个文件放在一起就可以运行。 /**//*FileCalendarBean.java*author:****Date:2007-12-823:37*返回某年某月的日历的字符串数组*/importjava.util.Calendar;publicclassCalendarBean...{intyear=2007,month=0;privateintmonthDays[]=...{31,28,31,30,31,30,31,31,30,31,30,31};//设置年份publicvoidsetYear(intyear)...{this.year=year;}//获取年份publicintgetYear()...{returnyear;}//设置月份publicvoidsetMonth(intmonth)...{this.month=month>0?month:1;}//获取月份publicintgetMonth()...{returnmonth;}//判断是否为闰年privatestaticbooleanisLeap(intyear)...{return((year%4==0)&&(year%100==0))||(year%400==0);}//获得当前年月的日历所组成字符串数组publicString[][]getCalendar()...{Stringdata[][]=newString[6][7];Calendarcale=Calendar.getInstance();cale.set(year,month-1,1);//该月1号是星期几intweekDay=cale.get(Calendar.DAY_OF_WEEK)-1;//该月的天数intday=monthDays[month-1];if(month==2&&isLeap(year))day=29;intnextDay=1;//添加字符串数组for(intk=0;k<6;k++)...{if(k==0)for(intj=weekDay;j<7;j++)...{data[k][j]=""+nextDay;nextDay++;}elsefor(intj=0;j<7&&nextDay<=day;j++)...{data[k][j]=""+nextDay;nextDay++;}}returndata;}} /**//*FileCalenderFrame.java*author:****Date:2007-12-823:37*一个简单的日历*/importjavax.swing.*;importjavax.swing.tree.*;importjava.awt.*;importjava.awt.event.*;importjavax.swing.event.*;publicclassCalenderFrameextendsJFrameimplementsItemListener,TreeSelectionListener...{JTabletable;JTreetree=null;DefaultMutableTreeNoderoot;Objectname[]=...{"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};JComboBoxyearList;CalendarBeancale;Stringrili[][];Stringitem[]=...{"2006","2007","2008","2009","2010"};JSplitPanesplit;intyear=2006;intmonth=0;JScrollPanescrollTree,scrollTable;publicCalenderFrame()...{cale=newCalendarBean();//添加年份列表yearList=newJComboBox();for(intk=0;k<item.length;k++)yearList.addItem(item[k]);yearList.addItemListener(this);//添加月份树root=newDefaultMutableTreeNode(item[0]);tree=newJTree(root);add(newJScrollPane(tree),BorderLayout.WEST);tree.addTreeSelectionListener(this);//设置年月及该月日历cale.setYear(year);cale.setMonth(month);rili=cale.getCalendar();table=newJTable(rili,name);//添加到窗口scrollTree=newJScrollPane(tree);scrollTable=newJScrollPane(table);split=newJSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,scrollTree,scrollTable);add(yearList,BorderLayout.NORTH);add(split,BorderLayout.CENTER);updateYear(year);//设置窗口属性setSize(580,350);setVisible(true);split.setDividerLocation(0.5);validate();setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}//更新年份及月份树privatevoidupdateYear(intyear)...{cale.setYear(year);root=newDefaultMutableTreeNode(String.valueOf(year));DefaultMutableTreeNodemonths[]=newDefaultMutableTreeNode[13];for(inti=0;i<12;i++)...{months[i]=newDefaultMutableTreeNode(""+(i+1));root.add(months[i]);}split.remove(scrollTree);tree=newJTree(root);tree.addTreeSelectionListener(this);scrollTree=newJScrollPane(tree);split.add(scrollTree,JSplitPane.LEFT);split.setDividerLocation(0.5);validate();}//年份列表的监听器publicvoiditemStateChanged(ItemEvente)...{StringyearStr=yearList.getSelectedItem().toString().trim();intyear=Integer.parseInt(yearStr);updateYear(year);}//树结点的监听器publicvoidvalueChanged(TreeSelectionEvente)...{DefaultMutableTreeNodemonthNode=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();if(monthNode.isLeaf())...{month=Integer.parseInt(monthNode.toString().trim());cale.setMonth(month);rili=cale.getCalendar();split.remove(scrollTable);table=newJTable(rili,name);scrollTable=newJScrollPane(table);split.add(scrollTable,JSplitPane.RIGHT);split.setDividerLocation(0.5);validate();System.out.println("validateok");}}publicstaticvoidmain(Stringargs[])...{newCalenderFrame();}}