2013-04-01 54 views
0

有人能告訴我爲什麼我的JTable沒有用我的模型在下面更新嗎?它在第一次出現時很好,但是當我輸入保存在數組​​中的新數據時,該表不會被新數據更新。擴展AbstractTableModel不更新JTable中的單元格內容

public class TableModel extends AbstractTableModel { 

    int numRows; 
    String columnNames[] = {"NH", "Horse Names", "VH", 
     "Proc. I", "Proc. II"}; 
    Object[][] myData; 

    TableModel() { 
     super(); 
     numRows = fnh; 
     myData = new Object[fnh][5]; 

     for (int i = 0; i < fnh; i++) { 
      for (int j = 0; j < 5; j++) { 
       if (j == 0) { 
        myData[i][0] = (Integer) nh[i]; 
       } else if (j == 1) { 
        myData[i][1] = (String) hNam[i]; 
       } else if (j == 2) { 
        myData[i][2] = (Integer) vh[i]; 
       } else if (j == 3) { 
        myData[i][3] = (String) proc_1[i]; 
       } else { 
        myData[i][4] = (String) proc_2[i]; 
       } 
      } 
     } 
    } 

    @Override 
    public int getColumnCount() { 
     return columnNames.length; 
    } 

    @Override 
    public int getRowCount() { 
     return myData.length; 
    } 

    @Override 
    public String getColumnName(int col) { 
     return columnNames[col]; 
    } 

    @Override 
    public boolean isCellEditable(int row, int col) { 
     return true; 
    } 

    @Override 
    public Object getValueAt(int row, int col) { 

     if (col == 0) { 
      return nh[row]; 
     } else if (col == 1) { 
      return hNam[row]; 
     } else if (col == 2) { 
      return vh[row]; 
     } else if (col == 3) { 
      return proc_1[row]; 
     } else { 
      return proc_2[row]; 
     } 
    } 

    @Override 
    public void setValueAt(Object value, int row, int col) { 
     myData[row][col] = value; 
     fireTableCellUpdated(row, col); 
    } 
} 
+0

我看不到'getColumnClass()'的實現。請編輯您的問題,以包含展示您描述的問題的[sscce](http://sscce.org/)。 – trashgod

回答

1

如果要更新的JTable中的行和使用setValueAt明確,而不是僅僅改變數據的值。如果要將新數據添加到JTable,則在TableModel中創建一個方法並重新創建大小爲1的新數據陣列,而不是現有數據填充舊數據,然後向其中添加新數據。然後點火fireTableRowsInserted(int firstRow, int lastRow)