2013-03-28 89 views
1

我想通過單擊按鈕來刷新JTable數據。JTable數據刷新問題

問題是JTable中的舊數據無法刪除,新數據剛添加到表中。我嘗試了下面的方法來刪除舊數據,但沒有一個能夠工作。

1. table.setModel(new DefaultTableModel()); 
2. ((DefaultTableModel)table.getModel()).setRowCount(0); 
3. ((DefaultTableModel)table.getModel()).fireTableDataChanged(); 
4. ((DefaultTableModel)table.getModel()).getDataVector().removeAllElements(); 
5. table.repaint(); 
6. model = (DefaultTableModel)table.getModel(); 
    while(model.getRowCount() > 0) { 
     model.removeRow(0); 
    } 
+2

對我來說1.夠了 – StanislavL

+0

在模型更改後,您可能沒有使JTable組件無效。 –

+0

您不應該使表格無效,更改模型會觸發幾個事件。 –

回答

4

有一個JTable的刷新按鈕是非常可疑的。這讓我覺得你沒有正確地添加數據,因爲每次添加或刪除數據時,JTable都應該刷新。

使用一個DefaultTableModel時候我會覈實幾件事情:

  1. 確保僅使用添加數據addRow
  2. 數據應該只使用insertRow
  3. 使用刪除數據插入removeRow

從不直接修改內部向量。它不會導致事件觸發,並且您被刷新按鈕卡住。我不知道他們爲什麼暴露它。 JavaDocs至少應該特別警告這一點。

如果一切都失敗了,請啓動一個調試器,看看會發生什麼。

+0

感謝您的建議!我添加了一個JButton來刪除JTable中的行。我使用removeRow方法,它的工作原理!但另一個問題發生了。當我使用addRow方法將新數據加載到JTable時,先前移除的數據再次出現在表中。我將啓動一個調試器來查看它是如何發生的。 – kimi

+0

另請參閱此[答案](http://stackoverflow.com/a/15444816/230513)。 – trashgod

0

更多的代碼可能適合在這裏。很難確切地告訴你在哪裏調用這些方法和順序。如果你改變模型,然後調用fireTableDataChanged()它應該工作....假設你已經更新了正確的TableModel。有一個很好的使用表的Java教程:http://docs.oracle.com/javase/tutorial/uiswing/components/table.html

+0

感謝您的回覆。在我的程序中,我創建了一個新的數據模型並設置爲JTable。然後調用fireTableDataChanged()方法。但是舊錶的數據仍然存在。我的JDK版本是1.7.0_09。我將檢查教程,看看是否有幫助。 – kimi

+0

不是,只有第二個和最後一個選項來自OP問題 – mKorbel