簡體   English   中英

JTable刪除所有行異常

[英]JTable Delete All Rows Exception

我正在嘗試從abstractTableModel中刪除所有條目。 只要不刪除剩余的最后一行,一切就可以正常工作,但是一旦刪除這一行,就會得到ArrayOutOfBoundsException。 我正在使用DefaultRowSorter,這似乎是異常。

線程“ AWT-EventQueue-0”中的異常java.lang.ArrayIndexOutOfBoundsException:數組索引超出范圍:java.util.Vector.get(Vector.java:694)處graphics.tableModel.MyTableModel.getValueAt(MyTableModel.java)為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。位於javax.swing.JTable.sortedTableChanged(JTable.java:4106)的JTable.notifySorter(JTable.java:4262)位於javax.swing.table.AbstractTableModel.fireTableChanged的javax.swing.JTable.tableChanged(JTable.java:4383) (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();

謝謝你的幫助

看來問題出在您使用的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;
  }
}

異常來自您的代碼:

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

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

您還可以從重寫getcolumnclass中受益,這樣它就不會在第一行中使用有點怪異的內容,而是先看看有什么方法:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM