我有一个jtable,其中自定义排序应用于数据。当表最初启动时,它只有String数据的列,所以排序很顺利。在表结构改变之后(添加了新列,其中Sting(“N / A”)和双数据组合在同一列中,自定义排序算法似乎被删除。现在只有字符串数据的列仍然被排序,因为使用Jtable进行defaultsorting,但是具有混合数据的列会产生classcastException。如果发生tableStructureChange事件,我是否可以保留自定义排序或重新应用它。
答案 0 :(得分:0)
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进行排序。尝试使用此代码并发布是否有任何例外
答案 1 :(得分:0)
问题是为什么要生成tableStructureChanged
事件?这意味着表的列结构已经改变,那么您如何知道相同的列是否存在?
如果您正在刷新表格,那么为什么要创建一个全新的TableMode。相反,您可以从表中删除所有数据行(即在DefaultTableModel中使用setRowCount(0)),然后插入新的数据行。这样就不会生成tableStructureEvent
。
另一个选项是保存排序信息并重新创建分拣机。您可以从DefaultRowSorter获取当前排序键。所以基本的逻辑是:
查看:Trying to get the sorter positon to retain after a table refresh了解工作示例。