我使用的JTable应该是可排序和可编辑的。为了使它可以排序,我做了以下事情:
table.setAutoCreateRowSorter(true);
在我实现此行之前,显示表并更改其数据非常有效。现在,当我编辑单元格时,抛出以下异常:
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Invalid range
at javax.swing.DefaultRowSorter.rowsUpdated(DefaultRowSorter.java:896)
at javax.swing.DefaultRowSorter.rowsUpdated(DefaultRowSorter.java:915)
at javax.swing.JTable.notifySorter(JTable.java:4264)
at javax.swing.JTable.sortedTableChanged(JTable.java:4118)
at javax.swing.JTable.tableChanged(JTable.java:4395)
at javax.swing.table.AbstractTableModel.fireTableChanged(AbstractTableModel.java:296)
at javax.swing.table.AbstractTableModel.fireTableCellUpdated(AbstractTableModel.java:275)
at ui.gui.chapterEditor.ChapterEditorTableModel.setValueAt(ChapterEditorTableModel.java:64)
at javax.swing.JTable.setValueAt(JTable.java:2741)
at javax.swing.JTable.editingStopped(JTable.java:4723)...
setValueAt方法如下:
@Override
public void setValueAt(Object value, int row, int column) {
updateVocable(content.getVocableList().get(row), column, value);
parent.setChanged(true);
fireTableCellUpdated(row, column);
}
请注意,在动态更改数据时,表构造一次。在给出上述异常的测试中,它被初始化为空,然后插入数据一次。只要我不编辑单元格,排序就可以完美地完成。每次用户交互都是在插入数据后完成的。