2014-01-05 34 views
0

我已經使用抽象表模型創建了一個JTable。這個表格有一個Integer對象數據和一個1維列標題的二維數組。一切正常,除非編輯&在程序運行時更改單元格數據,它將恢復爲默認值(使用getValueAt()創建)。我已經實現了抽象表模型setValueAt()方法,但它不起作用。JTable的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 

回答

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()方法刪除此行,並在構造函數初始化數組你的模型只有一次不是每一次都如現在。

0

問題出在getValueAt。這些方法不斷被調用。它不是一次性的事情。啓動表格模型外的值