Java JTable';s setValueAt()方法未更新单元格数据

Java JTable';s setValueAt()方法未更新单元格数据,java,swing,jtable,Java,Swing,Jtable,我使用抽象表模型创建了一个JTable。此表有一个整数对象数据的二维数组和一个一维列标题。除在程序运行时编辑和更改单元格数据外,一切正常,它恢复为默认值(使用getValueAt()创建)。我已经实现了抽象表模型setValueAt()方法,但它不起作用 有人能告诉我我的密码有什么问题吗 import javax.swing.table.AbstractTableModel; public class TableModel1 extends AbstractTableModel

我使用抽象表模型创建了一个JTable。此表有一个整数对象数据的二维数组和一个一维列标题。除在程序运行时编辑和更改单元格数据外,一切正常,它恢复为默认值(使用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
import javax.swing.table.AbstractTableModel;
公共类TableModel1扩展了AbstractTableModel{
/**
* 
*/
私有静态最终长serialVersionUID=1L;
String[]colNames=新字符串[30];
对象[][]数据=新整数[4][30];
@凌驾
public int getColumnCount(){
返回colNames.length;
}
@凌驾
public int getRowCount(){
返回4;
}
公共字符串getColumnName(int-col){
如果(列==0){
colNames[0]=“寄宿生”;
}
否则如果(列>0){

对于(int i=1;i这种情况似乎发生了,因为当
getValueAt()
方法调用时,您总是使用下一行刷新数组中的数据:

for(int i=0; i<data.length;i++){
        for(int j=0; j<data[i].length;j++){
            data[i][j]=new Integer(1);
        }
}

for(int i=0;i问题在于getValueAt。这些方法经常被调用。这不是一次性的事情。在表模型之外初始化值

请注意:在我的情况下,我在windowActivated事件上再次填充表。因此,它用加载时间数据覆盖了我的数据。请使用我现在使用的正确事件“FormWindowOpen”事件。