跪求解决JTable删除多行后,数据越界问题
1,删除勾选行(注我是从行号由大到小删除的,代码中注释的都是我试过方法,可是不行)。
//删除转回操作行
final DefaultTableModel tableModel= (DefaultTableModel) tblBillInfo.getModel();
System.out.println("---------a: "+ tblBillInfo.getRowCount());
for (int i = 0; i < idxs.length; i++) {
// tableModel.fireTableRowsDeleted((int) idxs[i], (int) idxs[i]);
tableModel.removeRow((int) idxs[i]);
// tableModel.getDataVector().remove((int) idxs[i]);
// tableModel.fireTableRowsDeleted((int) idxs[i], (int)
// idxs[i]);
// final int t = (int) idxs[i];
// System.out.println("---------t: "+ t);
// Runnable remover = new Runnable() {
// public void run() {
// tableModel.removeRow(t);
// }
// };
// SwingUtilities.invokeLater(remover);
}
tblBillInfo.revalidate();
// tblBillInfo.repaint();
// tblBillInfo.invalidate();
//tblBillInfo.updateUI();
System.out.println("---------b: " + tblBillInfo.getRowCount());
//SwingUtilities.isEventDispatchThread();
//tblBillInfo.dispatchEvent(e);
2,勾选点击删除后,没有报错,能正常删除,但是当我再去界面,勾选记录时却报错误了
Exception in thread "AWT-EventQueue-0"
java.lang.ArrayIndexOutOfBoundsException: 4 >= 3
at java.util.Vector.elementAt(Vector.java:432)
at javax.swing.table.DefaultTableModel.setValueAt(DefaultTableModel.java:637)
at javax.swing.JTable.setValueAt(JTable.java:1926)
at javax.swing.JTable.editingStopped(JTable.java:3339)
at javax.swing.AbstractCellEditor.fireEditingStopped(AbstractCellEditor.java:124)
at javax.swing.DefaultCellEditor$EditorDelegate.stopCellEditing(DefaultCellEditor.java:334)
at javax.swing.DefaultCellEditor.stopCellEditing(DefaultCellEditor.java:219)
at com.sf.semiautomatic.identify.UI.component.MyCellEditor.stopCellEditing(MyCellEditor.java:57)
at javax.swing.JTable.editCellAt(JTable.java:2667)
at com.sf.semiautomatic.identify.UI.component.JLightEditTable.editCellAt(JLightEditTable.java:47)
at javax.swing.plaf.basic.BasicTableUI$Handler.adjustFocusAndSelection(BasicTableUI.java:955)
at javax.swing.plaf.basic.BasicTableUI$Handler.mousePressed(BasicTableUI.java:922)
at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:222)
at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:221)
at java.awt.Component.processMouseEvent(Component.java:5498)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3135)
at java.awt.Component.processEvent(Component.java:5266)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3968)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3889)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1778)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)