個問題糾結了很久很久,目前網上好像還沒有人遇到過像我這樣比較繁雜的問題,今天終於搞定了,分享給大家看一看
情況是這樣的,我做一個關於SWING的工程,當然會用到大量的表格最早清空表格是這樣寫的
// DefaultTableModel model = (DefaultTableModel) table.getModel();
// for (int i = model.getRowCount() - 1; i >= 0; i--) {
// model.removeRow(i);
// }
用這個方法是有問題的,因爲是JTable >> TableModel >> TableData(Vector或String[])這樣的映射關係,如果用上面的方法,如果數據增加或減少都不會通知TableModel ,就導致每次清數據就報數據越界異常ArrayIndexOutOfBoundsException。
如果直接清理數據是會通知上層的監聽,改變模型
((DefaultTableModel) table.getModel()).getDataVector().clear(); //清除表格數據
((DefaultTableModel) table.getModel()).fireTableDataChanged();//通知模型更新
table.updateUI();//刷新表格