这是我的第一个问题。首先,我是Java新手,仍然很难理解事件。为了展示一些自定义工具提示(来自不同列的数据的组合),我使用了一个自定义模型来扩展AbstractTableModel,一个实现TableModelListener的CustomTableModelHandler和一个自定义的TableCellRenderer。用户只能进行单行选择,我检查了选项autocreaterowsorter。当移除一行我用这个方法:是什么原因
public void removeRow(int modelIndex) {
fireTableRowsDeleted(modelIndex, modelIndex);
rowData.remove(modelIndex);
}
为什么我第一次触发数据变化事件的原因是,我想更新与包含我即将删除的行数据的文本的JLabel(可能有更优雅的方式)。我总是通过模型索引行,我试图清除视图中的选择,但没有帮助。我似乎无法重现错误100%的时间,但它似乎发生在我编辑一行后的大部分时间,有一个列排序活动,然后删除一行(这实际上是行动之后的错误发生)。
所以,问题是:我怎么知道我的问题是什么原因?整个代码有点太大而无法在这里发布,但如果有人想看看它,我可以提供它。
(出现大量的时间)的错误:
run:
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at Contacts.ContactsGUI$CustomTableModel.getValueAt(ContactsGUI.java:1975)
at javax.swing.JTable.getValueAt(JTable.java:2686)
at javax.swing.JTable.prepareRenderer(JTable.java:5703)
at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2072)
at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1974)
at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1770)
at javax.swing.plaf.ComponentUI.update(ComponentUI.java:143)
at javax.swing.JComponent.paintComponent(JComponent.java:752)
at javax.swing.JComponent.paint(JComponent.java:1029)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5124)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1479)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1410)
at javax.swing.RepaintManager.paint(RepaintManager.java:1224)
at javax.swing.JComponent._paintImmediately(JComponent.java:5072)
at javax.swing.JComponent.paintImmediately(JComponent.java:4882)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:785)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:713)
at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:693)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:125)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
我一直在做模型行转换的视图,但您的其他提示我认为解决了我的问题。通过保存数据,删除行并发起更改,我似乎没有得到错误。我认为这是原因:在重新绘制表格时,我也删除了一行。多谢。 – Max 2010-12-20 14:57:57