从 Jtable 中删除行时出错

Error when delete row from 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

当 table 没有 ListSelectionListener 时不会发生这种情况。 我哪里错了?

在此先感谢您的帮助。

你能试试这个吗?

DefaultTableModel dtm = (DefaultTableModel) jTable1.getModel();
dtm.setRowCount(0);

This don't happen when table don't have ListSelectionListener

所以我猜你的代码删除了 table 中的所有行。随着行被删除,行 selection 必须更改,因为不再有任何行 select.

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

然后执行上面的语句,getSelectedRow() 方法return -1 导致异常。尝试:

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

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