2010-05-03 83 views
0

我想從我的abstractTableModel中刪除所有的entrys。只要我不刪除剩餘的最後一行,一切正常,但只要我刪除這一行,就會得到一個ArrayOutOfBoundsException。我正在使用DefaultRowSorter,這似乎是異常。JTable刪除所有行異常

在異常線程 「AWT-EventQueue的-0」 java.lang.ArrayIndexOutOfBoundsException:數組索引超出範圍:0 在java.util.Vector.get(Vector.java:694) 在graphics.tableModel .MyTableModel.getValueAt(MyTableModel.java:78) 在graphics.tableModel.MyTableModel.getColumnClass(MyTableModel.java:90) 在javax.swing.table.TableRowSorter.useToString(TableRowSorter.java:224) 在javax.swing中(DefaultRowSorter.java:1008)(默認)在javax.swing.DefaultRowSorter.rowsDeleted(DefaultRowSorter.java:866) 在javax.swing.JTable.notifySorter(JTable.java:4262) 在javax.swing.JTable.sortedTableChanged(JTable.java:4106) 在javax.swing.JTable.tableChanged(JTable.java:4383) 在javax.swing.table.AbstractTableModel.fireTableChanged(AbstractTableModel.java:280)

我的代碼刪除所有行:

public void deleteAll() { 
int size = data.size()-1; 
data.clear(); 
this.fireTableRowsDeleted(0, size); 
} 

只需刪除最後一個現有行就會發生同樣的情況。

public void deleteRow(int row) { 
data.remove(row); 
} 

我打電話deleteRow方式:

for (int i = rows.length - 1; i >=0; i--) { 

tm.deleteRow(行[1]); }

tm.fireTableDataChanged();

感謝您的幫助

回答

2

看來這個問題在MyTableModel您使用。模型的getColumnClass()嘗試調用getValueAt()以確定類型,但表中沒有值,因此是例外。所以只需修復getColumnClass(),以便它不調用getValueAt()。通常情況下,列類型並沒有改變,所以你應該有這樣的事情:

public Class<?> getColumnClass(int columnIndex) { 
    switch (columnIndex) { 
    case 0: return Integer.class; 
    case 1: return String.class; 
    case 2: return Double.class; 
    default: return null; 
    } 
} 
+0

非常感謝。這是做的竅門:) – Dimitri 2010-05-03 07:45:27

0

唯一的例外是走出你的代碼:

graphics.tableModel.MyTableModel.getValueAt(MyTableModel.java:78) 

看起來你實現getValueAt的需要更新處理表中不存在的位置?

您還希望從覆蓋getColumnClass中受益,它不使用它有點哈克搶第一排,看看那裏有什麼方法來開始:)

+0

謝謝:)我真的很想給你兩個功勞,但我只能標記一個答案是正確的;) – Dimitri 2010-05-03 07:46:21

+0

哈哈,沒有傷害,我失去了打字慢:) – Affe 2010-05-03 08:04:29