0

abstractTableModel からすべてのエントリを削除しようとしています。最後に残った行を削除しない限り、すべて正常に動作しますが、これを削除するとすぐに ArrayOutOfBoundsException が発生します。DefaultRowSorter を使用していますが、これは例外のようです。

スレッド「AWT-EventQueue-0」での例外 java.lang.ArrayIndexOutOfBoundsException: 配列インデックスが範囲外です: java.util.Vector.get(Vector.java:694) で 0 が 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.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.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(行[i]); }

tm.fireTableDataChanged();

ご協力いただきありがとうございます

4

2 に答える 2

2

問題は、使用している MyTableModel にあるようです。モデルの getColumnClass() は、型を判別するために getValueAt() を呼び出そうとしますが、テーブルに値がないため、例外です。したがって、getValueAt() を呼び出さないように getColumnClass() を修正するだけです。通常、列のタイプは変更されないため、次のようにする必要があります。

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 をオーバーライドして、最初の行を取得するややハックなグラブを使用せず、最初にメソッドがあるかどうかを確認することもできます:)

于 2010-05-03T07:25:15.737 に答える