在表结构更改后,将自定义排序保留在jtable中



我有一个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获取当前排序键。因此,基本逻辑是:

  1. getSortKeys()
  2. 刷新TableModel
  3. 重新创建分类器
  4. setSortKeys(…)

检查:对于一个工作示例,尝试在刷新表后保留分拣机位置。

相关内容

  • 没有找到相关文章

最新更新