大概代码如下:
import java.util.Vector;import javax.swing.table.AbstractTableModel;public class TempModel{
private Vector dataVector = new Vector();
private RunModel runModel; private TempModel(){
runModel = new RunModel();
initTableData(10);
        }
// 初始化这个model
public void initTableData(int rSize) {
Vector vCol = new Vector();
for (int i = 0; i < 10; i++) {
vCol.add(Float.valueOf(i));
} try {
for (int i = 0; i < rSize; i++) {
dataVector.add(vCol);
}
runModel.fireTableDataChanged();
} catch (Exception e) {
//
} } public void setDataVector(Vector vector) {
dataVector.removeAllElements();
dataVector = vector;
runModel.fireTableDataChanged();
}// 内部类
private class RunModel extends AbstractTableModel {
//....
public boolean isCellEditable(int row, int col) {
return true;
} public Object getValueAt(int row, int col) {
System.out.println("dataVector:"+dataVector);
System.out.println("row:"+row+" col:"+col+" value:"+((Vector) dataVector.elementAt(row)).elementAt(col));
return ((Vector) dataVector.elementAt(row)).elementAt(col);
}
}
}我现在的问题是:
当然第一次进来的时候,调用setDataVector(),把数据值传进去,显示是OK的。。
然后我的系统不关,第二次再进来时,调用setDataVector(),把数据值传进去,发现仍然显示第一次进来的数据,
研究发现getValueAt()这个方法里面输出来的信息有二次。首先打印出了第二次传到dataVector的值,然后再打印了第一次传进来的值,这样就把第二次的值覆盖了
第三次再进来时,会打印三次,一次次覆盖,最后显示第一次的,
第四次进来时,会打印四次,,依次增加。
我查了好久,都不知道是什么原因,好像每次的dataVector被缓存到一个队列里面了。但是我没有代码去做这事啊。
请swing高手帮帮我,找找是什么原因。然后就是setValueAt()这个方法的原理,以及AbstractTableModel的执行原理是什么,我还没有完全明白。
万分感谢!
对不起,以前的号不记得密码了,新申请的一个号,没有分。。如果有分了,以后一定送给大家。。