单击tableview列标题时如何首先使用降序排序?

y3bcpkx1  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(563)

JavaFXTableView排序在单击列标题时首先使用升序,然后在第二次单击时使用降序。我有一个包含运动队数据的表,其中有赢、输等列。默认情况下,赢应该按降序排列,输应该按升序排列,这样,当单击一个标题时,每个类别中最好的球队总是在顶部。
我试过了 sortType="DESCENDING" 在fxml文件中 setSortType(TableColumn.SortType.DESCENDING) 在代码中没有效果。

hyrbngr7

hyrbngr71#

在我的用例中,二次排序选项更像是一个障碍。我提出的解决方案只允许以一种方式对列进行排序,单击标题可在排序和不用于排序之间切换。
只允许降序排序更简单,并且只需要一个表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
    }
});

相关问题