我在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),困扰好几天了,谢谢高手能为我解答!
问题是:假如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),困扰好几天了,谢谢高手能为我解答!
解决方案 »
- 急JAVA
- 用SWING实现类似微软的IP输入框的问题
- 一道面试题
- 关于代码点,代码单元和unicode的疑问.
- 学习JAVA 一个半月时间,遇到一些基本问题, 烦请高手们的解答下或菜鸟们共同学习下.
- IBM笔记本暑期狂降,最新价格
- 我是新手
- swing和swt能不能实现像msn用户登录和聊天,右下角出提示框的功能。
- 求swt相关资料
- 20分!小问题!?swing里面的类的源码我在那里能看到!如openfiledialog!!!
- java 中sleep()方法或者wait()方法的使用
- 我学习Java中遇到Fatal exception occurred,program will exit。请各位兄弟帮忙
不过给格例子
http://hi.baidu.com/1shome/blog/item/e07c3ff0c4a00bc27931aaa8.html
我认为删除操作是根据JTable的行递增删除~!~
要解决这个问题~~你不妨在删除时给删除方法一个参数~~使它从第一条记录删除~~
或者是加一条判断语句~~~如果到最后就转到第一条记录。
在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)