JTable Удалить все строки, исключение - PullRequest
0 голосов
/ 03 мая 2010

Я пытаюсь удалить все записи из моей abstractTableModel. Пока я не удаляю последнюю оставшуюся строку, все работает нормально, но как только я удаляю эту, я получаю 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) 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.deleteRow (строки [I]); }

tm.fireTableDataChanged ();

спасибо за вашу помощь

Ответы [ 2 ]

2 голосов
/ 03 мая 2010

Кажется, проблема в 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;
  }
}
0 голосов
/ 03 мая 2010

Исключение исходит из вашего кода:

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

Похоже, ваша реализация getValueAt нуждается в обновлении для обработки местоположений, которых нет в таблице?

Вы также выиграете от переопределения класса getcolumnclass, чтобы он не использовал несколько хакерский захват первой строки и посмотрите, какой там метод для начала:)

...