JTable的setValueAt()方法不更新单元格数据

时间:2014-01-05 20:33:30

标签: java swing jtable

我使用抽象表模型创建了一个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

2 个答案:

答案 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中。这些方法不断被召唤。这不是一次性的事情。启动表模型之外的值