我的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时,不会发生这种情况。 我哪里错了?
提前感谢您的帮助。
答案 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));