首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

JTable 有关问题 不解? 急 !

2012-01-02 
JTable问题 不解??????急!!我是用JTable写的这个万年历,但运行后,点击JTable中的单元格时,表中显示的值全

JTable 问题 不解?????? 急 !!
我是用   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;
}

}


[解决办法]
你发了两次,另一个里我回答了

热点排行