我是用 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;
}}