我在JTable中用列的方式生成”cancel“的JButton按钮,目的是:每次双击"cancel"按钮,则removerow当前行(stateModel.removeRow(currentRow);)。
问题是:假如JTable中有三条记录,当我从上到下的顺序cancel掉JTable的每一行时则正常;但是当我先cancel掉最后一行后(不会出现异常),再cancel其它行时则会出现异常,
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2 >= 2
at java.util.Vector.elementAt(Unknown Source)
at javax.swing.table.DefaultTableModel.setValueAt(Unknown Source)
at javax.swing.JTable.setValueAt(Unknown Source)
at javax.swing.JTable.editingStopped(Unknown Source)
at javax.swing.AbstractCellEditor.fireEditingStopped(Unknown Source)
at javax.swing.AbstractCellEditor.stopCellEditing(Unknown Source)
at javax.swing.JTable.editCellAt(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI$Handler.adjustFocusAndSelection(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI$Handler.mousePressed(Unknown Source)
at java.awt.AWTEventMulticaster.mousePressed(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source),困扰好几天了,谢谢高手能为我解答!

解决方案 »

  1.   

    具体需要查看代码
    不过给格例子
    http://hi.baidu.com/1shome/blog/item/e07c3ff0c4a00bc27931aaa8.html
      

  2.   

    删除最后行以后currentRow应该是新的一行,0或者1,但现在还是=2,所以就出现越界了,错误现象应该是这样
      

  3.   

    你从上到下删除没有问题而先删除最后一行后,再删其他的数据时抛出异常
        我认为删除操作是根据JTable的行递增删除~!~
        要解决这个问题~~你不妨在删除时给删除方法一个参数~~使它从第一条记录删除~~
        或者是加一条判断语句~~~如果到最后就转到第一条记录。
      

  4.   

    JTable的editor与行删除的java.lang.ArrayIndexOutOfBoundsException错误(by lie2believe)
    在JTable中,如果单元格设成editor,而且更改了editor值的话,如果恰好处在最后一行,如果这时候把该行删除,去点其它行的editor的话,会出现java.lang.ArrayIndexOutOfBoundsException的错误!==为什么呢?
    因为JTable中的editor值变化当时,并不会引发JTable的变化,只有焦点不在该editor时,才会有消息通知JTable,会生成一个javax.swing.AbstractCellEditor.fireEditingStopped消息,继而引发javax.swing.JTable.editingStopped事件,但事件发生时,该行已经被删除了,因而出现上面的错误。==怎样解决呢?
    在editor的相应事件中执行editingStopped或者editingCanceled即可。如在JCheckBox的editor中,执行:
    public void actionPerformed(ActionEvent e) {
    super.actionPerformed(e);
    JCheckBox box = (JCheckBox)e.getSource();
    ChangeEvent ce = new ChangeEvent(box);
    self.editingStopped(ce);
    }

    (by lie2believe)