我有一个jtable,其中对数据应用自定义排序。当表最初启动时,它只有包含String数据的列,所以排序很好。在表结构发生变化(添加了新列,其中包含Sting("N/a")和同一列中的双数据的组合)后,自定义排序算法似乎被删除了。现在,由于Jtable的defaultsorting,只有字符串数据的列仍然会被排序,但混合数据的列会出现classcastException。有没有我可以保留自定义排序,或者在tableStructureChange事件发生后立即重新应用它。
public void sortTable(){
TableRowSorter<TableModel> sort = new TableRowSorter<TableModel>(Jtable.getModel());
Jtable.setRowSorter(sort);
List<RowSorter.SortKey> sortKeys = new ArrayList<>();
sortKeys.add(new RowSorter.SortKey(4, SortOrder.ASCENDING));
sortKeys.add(new RowSorter.SortKey(0, SortOrder.ASCENDING));
sorter.setSortKeys(sortKeys);
}
这就是实际应该如何对Jtable进行排序。尝试使用此代码,如果有任何异常,则发布
问题是为什么生成tableStructureChanged
事件?这意味着表的列结构已经改变,那么你怎么知道同样的列会存在呢?
如果您正在刷新表,那么为什么要创建一个全新的TableMode。相反,您可以从表中删除所有数据行(即在DefaultTableModel中使用setRowCount(0)),然后插入新的数据行。这样就不会生成tableStructureEvent
。
另一个选项是保存分拣信息并重新创建分拣机。您可以从DefaultRowSorter获取当前排序键。因此,基本逻辑是:
- getSortKeys()
- 刷新TableModel
- 重新创建分类器
- setSortKeys(…)
检查:对于一个工作示例,尝试在刷新表后保留分拣机位置。