从Jtable中删除行时出错

时间:2015-10-31 09:24:59

标签: java swing jtable listselectionlistener

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

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

你能尝试一下吗?

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

答案 1 :(得分:0)

  

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