| 发表于:2007-09-26 12:58:45 楼主 |
我是用 jtable 写的这个万年历,但运行后,点击jtable中的单元格时,表中 显示的值全都不显示了,这是怎么回事??谢谢!!!! 以下是我的两个文件源码: (1)calendartest.java : package forum; import javax.swing.swingutilities; import java.awt.borderlayout; import javax.swing.jpanel; import javax.swing.jframe; import java.awt.gridbaglayout; import javax.swing.jlist; import java.awt.gridbagconstraints; import java.awt.flowlayout; import javax.swing.jcombobox; import javax.swing.jlabel; import javax.swing.jtextfield; import java.awt.gridlayout; import java.awt.dimension; import java.util.calendar; import javax.swing.swingconstants; import javax.swing.jtable; import javax.swing.jscrollpane; /** * * 日期:2007-9-24 文件名:calendartest.java 版本:0.1 */ public class calendartest extends jframe { private static final long serialversionuid = 1l; private jpanel jcontentpane = null; private jpanel datechooserpanel = null; private jpanel datedisplaypanel = null; private jcombobox monthcombox = null; private jcombobox yearcombox = null; private jlabel currentlabel = null; private jtextfield currentfield = null; private jpanel datepanel = null; private jscrollpane jscrollpane = null; private jtable datetable = null; /** * this method initializes datechooserpanel * * @return javax.swing.jpanel */ private jpanel getdatechooserpanel() { if (datechooserpanel == null) { currentlabel = new jlabel(); currentlabel.settext( "当前选择日期: "); datechooserpanel = new jpanel(); datechooserpanel.setlayout(new flowlayout()); datechooserpanel.add(getyearcombox(), null); datechooserpanel.add(getmonthcombox(), null); datechooserpanel.add(currentlabel, null); datechooserpanel.add(getcurrentfield(), null); } return datechooserpanel; } /** * this method initializes datedisplaypanel * * @return javax.swing.jpanel */ private jpanel getdatedisplaypanel() { if (datedisplaypanel == null) { datedisplaypanel = new jpanel(); datedisplaypanel.setlayout(new borderlayout()); datedisplaypanel.add(getdatepanel(), borderlayout.center); } return datedisplaypanel; } /** * this method initializes monthcombox * * @return javax.swing.jcombobox */ private jcombobox getmonthcombox() { if (monthcombox == null) { monthcombox = new jcombobox(); for (int i = 1; i < 13; i++) { monthcombox.additem(i); } } return monthcombox; } /** * this method initializes yearcombox * * @return javax.swing.jcombobox */ private jcombobox getyearcombox() { if (yearcombox == null) { yearcombox = new jcombobox(); yearcombox.additemlistener(new java.awt.event.itemlistener() { public void itemstatechanged(java.awt.event.itemevent e) { } }); for (int i = 1990; i < 2001; i++) { yearcombox.additem(i); } } return yearcombox; } /** * this method initializes currentfield * * @return javax.swing.jtextfield */ private jtextfield getcurrentfield() { if (currentfield == null) { currentfield = new jtextfield(); currentfield.seteditable(false); currentfield.settext( "1990-01-01 一 "); } return currentfield; } /** * this method initializes datepanel * * @return javax.swing.jpanel */ private jpanel getdatepanel() { if (datepanel == null) { datepanel = new jpanel(); datepanel.setlayout(new borderlayout()); datepanel.add(getjscrollpane(), borderlayout.center); } return datepanel; } /** * this method initializes jscrollpane * * @return javax.swing.jscrollpane */ private jscrollpane getjscrollpane() { if (jscrollpane == null) { jscrollpane = new jscrollpane(); jscrollpane.setviewportview(getdatetable()); } return jscrollpane; } /** * this method initializes datetable * * @return javax.swing.jtable */ private jtable getdatetable() { if (datetable == null) { datetable = new jtable(); int year = 2007; int month = 9; datetable.setmodel(new datetablemodel(year,month)); } return datetable; } /** * 功能:万年历主函数 */ public static void main(string[] args) { swingutilities.invokelater(new runnable() { public void run() { calendartest thisclass = new calendartest(); thisclass.setdefaultcloseoperation(jframe.exit_on_close); thisclass.setvisible(true); } }); } /** * this is the default constructor */ public calendartest() { super(); initialize(); } /** * this method initializes this * * @return void */ private void initialize() { this.setsize(348, 229); this.setcontentpane(getjcontentpane()); this.settitle( "自制万年历 "); // setdatedisplay(2007, 9); } /** * this method initializes jcontentpane * * @return javax.swing.jpanel */ private jpanel getjcontentpane() { if (jcontentpane == null) { jcontentpane = new jpanel(); jcontentpane.setlayout(new borderlayout()); jcontentpane.add(getdatechooserpanel(), borderlayout.north); jcontentpane.add(getdatedisplaypanel(), borderlayout.center); } return jcontentpane; } } (1) datetablemodel.java : package forum; import java.util.calendar; import javax.swing.table.abstracttablemodel; public class datetablemodel extends abstracttablemodel { private static final long serialversionuid = -677920339189618690l; int n = 1; int day = 0; static int[] daysarray = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31}; static string[] weekarray = { "日 ", "一 ", "二 ", "三 ", "四 ", "五 ", "六 "}; /** * 选择的年份和月份所对应的天数 */ private int days = 0; /** * 当前选择的年份和月份1号对应的星期 */ private int week = 0; public datetablemodel(int year, int month) { days = getdaysofmonth(year, month); week = getdayofweek(year, month); system.out.println(week + "------- " + days); } public int getcolumncount() { return 7; } public int getrowcount() { return 6; } public object getvalueat(int rowindex, int columnindex) { object value = null; if (n < week && n <= days) { value = " "; } else if (n > = week && day < days) { value = daysarray[day]; day = day+1; }else if(n> days){ value = " "; } n = n + 1; return value; } public boolean iscelleditable(int rowindex,int columnindex){ return false; } public string getcolumnname(int columnindex){ string name = " "; name = weekarray[columnindex]; return name; } private int getdayofweek(int year, int month) { int week = 0; calendar cal = calendar.getinstance(); cal.set(year, month - 1, 1); week = cal.get(calendar.day_of_week); system.out.println(week + "------- " + cal.get(calendar.year) + "----- " + cal.get(calendar.month) + "---- " + cal.get(calendar.day_of_month) + "--- " + days); return week; } /** * 获取当前选择年份和月份所对应的天数 */ private int getdaysofmonth(int year, int month) { int days = 30; boolean leap = false; if ((year % 4 == 0 & year % 100 != 0) ¦ ¦ (year % 400 == 0)) { leap = true; } switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: { days = 31; break; } case 4: case 6: case 9: case 11: { break; } case 2: { if (leap) { days = 29; break; } else { days = 28; break; } } } return days; } } |
|
|
|
|