我的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时,不会发生这种情况。
我在哪里错?

在此先感谢您的帮助。

最佳答案

当表没有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));

关于java - 从Jtable删除行时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33450009/

10-14 12:39
查看更多