2010-05-03 85 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