我的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/