有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JTable删除所有行异常

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

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0 at java.util.Vector.get(Vector.java:694) at graphics.tableModel.MyTableModel.getValueAt(MyTableModel.java:78) at graphics.tableModel.MyTableModel.getColumnClass(MyTableModel.java:90) at javax.swing.table.TableRowSorter.useToString(TableRowSorter.java:224) at javax.swing.DefaultRowSorter.updateUseToString(DefaultRowSorter.java:607) at javax.swing.DefaultRowSorter.sort(DefaultRowSorter.java:556) at javax.swing.DefaultRowSorter.shouldOptimizeChange(DefaultRowSorter.java:1008) at javax.swing.DefaultRowSorter.rowsDeleted(DefaultRowSorter.java:866) at javax.swing.JTable.notifySorter(JTable.java:4262) at javax.swing.JTable.sortedTableChanged(JTable.java:4106) at javax.swing.JTable.tableChanged(JTable.java:4383) at 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。删除行(行[i]); }

tm。fireTableDataChanged()

谢谢你的帮助


共 (2) 个答案

  1. # 1 楼答案

    问题似乎出在您使用的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;
      }
    }
    
  2. # 2 楼答案

    例外情况来自您的代码:

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

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

    您还可以从重写getcolumnclass中获益,这样它就不会使用有点粗糙的抓取第一行,然后看看从何开始的方法:)