JTable删除所有行例外

时间:2010-05-03 07:08:06

标签: java jtable abstracttablemodel

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

  

线程“AWT-EventQueue-0”中的异常java.lang.ArrayIndexOutOfBoundsException:数组索引超出范围:0    在java.util.Vector.get(Vector.java:694)    at graphics.tableModel.MyTableModel.getValueAt(MyTableModel.java:78)    at 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)    在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 个答案:

答案 0 :(得分: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;
  }
}

答案 1 :(得分:0)

您的代码中出现了异常:

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

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

你也可以从覆盖getcolumnclass中受益,这样它就不会使用它有点hacky抓住第一行并看看有什么方法可以开始:)