0

Javafx TableView 排序在单击列标题时首先使用升序,然后在第二次单击时使用降序。我有一个包含运动队数据的表格,其中包含胜利、失败等列。默认情况下,胜利应按降序排序,损失按升序排序,因此当单击标题一次时,每个类别中最好的团队始终位于顶部。

我已经sortType="DESCENDING"在 fxml 文件和setSortType(TableColumn.SortType.DESCENDING)代码中尝试过,但没有任何效果。

4

1 回答 1

1

在我的用例中,二级排序选项更像是一个障碍。我想出的解决方案只允许以一种方式对列进行排序,单击标题在已排序和不用于排序之间切换。

只允许降序排序更简单,只需要一个表 sortOrder 的监听器。但是,仅允许升序排序需要向列 sortTypeProperty 添加一个侦听器,并且对于使用 shift 键进行多重排序才能正常工作,还必须在表 sortOrder 侦听器中强制执行正确的排序。

columnLosses.sortTypeProperty().addListener(o -> {
    if (columnLosses.getSortType().equals(TableColumn.SortType.DESCENDING)) {
        table.getSortOrder().remove(columnLosses);
    }
});
table.getSortOrder().addListener((Observable o) -> {
    if (table.getSortOrder().contains(columnWins)) {
        columnWins.setSortType(TableColumn.SortType.DESCENDING);
    }
    if (columnLosses.getSortType().equals(TableColumn.SortType.DESCENDING)) {
        columnLosses.setSortType(TableColumn.SortType.ASCENDING); // needed for correct multicolumn sorting
    }
});
于 2020-12-03T15:11:19.007 回答