Ошибка при удалении строки из Jtable

В моем Jtable есть listSelectionListener:

jTable1.getSelectionModel().addListSelectionListener(new ListSelectionListener() {

        @Override
        public void valueChanged(ListSelectionEvent e) {
            System.out.println(jTable1.getValueAt(jTable1.getSelectedRow(), 0));
        }
    });

я создаю кнопку для удаления всех строк Jtable с событием:

for (int i =jTable1.getModel().getRowCount()-1; i >=0 ; i--) {
        ((DefaultTableModel)jTable1.getModel()).removeRow(i);
    }

Если я нажимаю кнопку, не выбирая какую-либо строку, ошибки нет, но когда я выбираю строку, затем нажимаю кнопку, я получаю эту ошибку:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1

Этого не происходит, если в таблице нет ListSelectionListener. Где я ошибаюсь?

Заранее спасибо за помощь в этом.


person spqa    schedule 31.10.2015    source источник
comment
Может быть, ваш JTable не имеет данных в позиции i.   -  person Shiladittya Chakraborty    schedule 31.10.2015
comment
System.out.println(jTable1.getValueAt(jTable1.getSelectedRow(), 0)); - jTable1.getSelectedRow() вернет -1, если ни одна строка не выбрана.   -  person Bon    schedule 31.10.2015


Ответы (2)


Этого не происходит, если в таблице нет ListSelectionListener

Итак, я предполагаю, что ваш код для удаления всех строк в таблице выполняется. Когда строки удаляются, выбор строк должен измениться, так как больше нет строк для выбора.

System.out.println(jTable1.getValueAt(jTable1.getSelectedRow(), 0));

Затем выполняется приведенный выше оператор, и метод getSelectedRow() возвращает -1, что вызывает исключение. Пытаться:

int selectedRow = jTable1.getSelectedRow();
System.out.println("Selected Row: " + selectedRow;

if (selectedRow != -1)
    System.out.println(jTable1.getValueAt(selectedRow, 0));
person camickr    schedule 31.10.2015

Можешь попробовать с этим?

DefaultTableModel dtm = (DefaultTableModel) jTable1.getModel();
dtm.setRowCount(0);
person Shiladittya Chakraborty    schedule 31.10.2015
comment
Я не понимаю твою мысль? - person spqa; 31.10.2015
comment
Это сообщит модели, что у нее должно быть 0 строк данных. Модель отправит соответствующие события изменения данных в таблицу, которая перестроит себя. - person Shiladittya Chakraborty; 31.10.2015
comment
(1+) для более простого способа удаления всех строк из TableModel, хотя я не думаю, что это исправит исключение. - person camickr; 31.10.2015