请教:JTable中removeRow的问题

snbj_111 2007-05-21 03:20:21
我在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),困扰好几天了,谢谢高手能为我解答!
...全文
821 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lie2believe 2010-11-25
  • 打赏
  • 举报
回复
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)
slacrey 2007-05-24
  • 打赏
  • 举报
回复
你从上到下删除没有问题而先删除最后一行后,再删其他的数据时抛出异常
我认为删除操作是根据JTable的行递增删除~!~
要解决这个问题~~你不妨在删除时给删除方法一个参数~~使它从第一条记录删除~~
或者是加一条判断语句~~~如果到最后就转到第一条记录。
supersunyi 2007-05-23
  • 打赏
  • 举报
回复
删除最后行以后currentRow应该是新的一行,0或者1,但现在还是=2,所以就出现越界了,错误现象应该是这样
mdxk 2007-05-23
  • 打赏
  • 举报
回复
具体需要查看代码
不过给格例子
http://hi.baidu.com/1shome/blog/item/e07c3ff0c4a00bc27931aaa8.html

62,629

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧