【问题标题】:How to "un-sort" a JTable?如何“取消排序”一个 JTable?
【发布时间】:2012-05-24 13:40:36
【问题描述】:

我为JTable 创建了一个TableRowSorter,并且能够正确地对表格进行排序。但是有没有办法让表格在我排序之前恢复到原来的状态?我尝试单击表格标题,但似乎它仅按升序或降序对表格进行排序,并且不会将表格返回到排序之前的原始状态。是否可以取消排序表格并将其恢复到原始状态?谢谢!

【问题讨论】:

    标签: java swing sorting jtable


    【解决方案1】:

    空的sortKeys 列表表示视图应该是未排序的。尝试以下方法来恢复原始行顺序:

    table.getRowSorter().setSortKeys(null);
    

    RowSorter 规范中了解更多信息。

    【讨论】:

      【解决方案2】:

      唯一的方法是在触发“unsort”事件时保持原始状态并恢复它。

      因此,您需要在列表或数组中保持可以恢复的原始行顺序。您还可以保留对原始 DefaultTableModel 副本的引用。

      【讨论】:

      • 我建议使用堆栈
      • 好主意 - 你会在上面放什么? DefaultTableModel 引用?这将允许多个“撤消”选项。创建一个 DTM,将其添加到堆栈中,然后显示。我喜欢...
      • 抱歉,这完全是错误的 - 将 sortKeys 清空是完全取消排序表的方法(并且一直是 ;-)
      【解决方案3】:

      table.setRowSorter(new TableRowSorter(table.getModel()));

      如果没有清空排序键,这应该可以工作。

      【讨论】:

        【解决方案4】:

        我遇到了同样的问题,在排序并更改为空表后,getColumClass 从我的模型中抛出了 NullPointer 异常。 我通过在清空我的桌子并再次启用排序器之前禁用自动排序器来解决这个问题。

        this.mainTable.setAutoCreateRowSorter(false);
        this.tableModel.removeAllElements();
        this.mainTable.setAutoCreateRowSorter(true);
        this.mainTable.repaint();
        this.mainScrollPane.doLayout();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-11-12
          • 2011-12-06
          • 1970-01-01
          • 2023-03-16
          • 2023-03-30
          • 1970-01-01
          • 2012-08-29
          相关资源
          最近更新 更多