我使用抽象表模型创建了一个JTable。这个表有一个Integer对象数据和一个1维列标题的二维数组。除了我编辑和编辑时,一切正常。在程序运行时更改单元格数据,它将恢复为默认值(使用getValueAt()创建)。我已经实现了抽象表模型setValueAt()方法,但它不起作用。
有人可以告诉我我的代码中有什么问题吗?
import javax.swing.table.AbstractTableModel;
public class TableModel1 extends AbstractTableModel {
/**
*
*/
private static final long serialVersionUID = 1L;
String [] colNames=new String[30];
Object[][] data= new Integer[4][30];
@Override
public int getColumnCount() {
return colNames.length;
}
@Override
public int getRowCount() {
return 4;
}
public String getColumnName(int col){
if (col==0){
colNames[0]="Boarders";
}
else if(col>0){
for(int i=1;i<colNames.length;i++){
colNames[i]=new String(""+i);
}
}
return colNames[col];
}
@Override
public Object getValueAt(int row, int col) {
for(int i=0; i<data.length;i++){
for(int j=0; j<data[i].length;j++){
data[i][j]=new Integer(1);
}
}
return data[row][col];
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public boolean isCellEditable(int row, int col){
return true;
}
public void setValueAt (Object aValue, int row, int col){
data[row][col]=(Integer)aValue;
fireTableCellUpdated(row,col);
}
}//end class
答案 0 :(得分:1)
似乎发生了这种情况,因为当getValueAt()
方法调用时,您总是使用下一行刷新数组中的数据:
for(int i=0; i<data.length;i++){
for(int j=0; j<data[i].length;j++){
data[i][j]=new Integer(1);
}
}
因此,从getValueAt()
方法中删除这一行,并且只在模型的构造函数中初始化一次,而不是每次都像现在一样。
答案 1 :(得分:0)
问题出在getValueAt中。这些方法不断被召唤。这不是一次性的事情。启动表模型之外的值