0

我正在尝试从我的 abstractTableModel 中删除所有条目。只要我不删除剩下的最后一行,一切正常,但只要我删除这一行,我就会得到一个 ArrayOutOfBoundsException。我正在使用 DefaultRowSorter,这似乎是例外。

线程“AWT-EventQueue-0”java.lang.ArrayIndexOutOfBoundsException 中的异常:数组索引超出范围:在 graphics.tableModel.MyTableModel.getValueAt(MyTableModel.java) 的 java.util.Vector.get(Vector.java:694) 中的 0 :78) 在 graphics.tableModel.MyTableModel.getColumnClass(MyTableModel.java:90) 在 javax.swing.table.TableRowSorter.useToString(TableRowSorter.java:224) 在 javax.swing.DefaultRowSorter.updateUseToString(DefaultRowSorter.java:607)在 javax.swing.DefaultRowSorter.sort(DefaultRowSorter.java:556) 在 javax.swing.DefaultRowSorter.shouldOptimizeChange(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章)

我删除所有行的代码:

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(行[i]); }

tm.fireTableDataChanged();

感谢您的帮助

4

2 回答 2

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;
  }
}
于 2010-05-03T07:18:44.290 回答
0

异常来自您的代码:

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

看起来您的 getValueAt 实现需要更新以处理表中不存在的位置?

您还可以从覆盖 getcolumnclass 中受益,这样它就不会使用它有点 hacky 的方式来抓取第一行,看看有什么方法可以开始:)

于 2010-05-03T07:25:15.737 回答