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

时间:2016-04-20 04:23:39

标签: java swing sorting jtable rowsorter

我有一个jtable,其中自定义排序应用于数据。当表最初启动时,它只有String数据的列,所以排序很顺利。在表结构改变之后(添加了新列,其中Sting(“N / A”)和双数据组合在同一列中,自定义排序算法似乎被删除。现在只有字符串数据的列仍然被排序,因为使用Jtable进行defaultsorting,但是具有混合数据的列会产生classcastException。如果发生tableStructureChange事件,我是否可以保留自定义排序或重新应用它。

2 个答案:

答案 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获取当前排序键。所以基本的逻辑是:

  1. getSortKeys()
  2. 刷新TableModel
  3. 重新创建分拣机
  4. setSortKeys(...)
  5. 查看:Trying to get the sorter positon to retain after a table refresh了解工作示例。