JavaFXTableView排序在单击列标题时首先使用升序,然后在第二次单击时使用降序。我有一个包含运动队数据的表,其中有赢、输等列。默认情况下,赢应该按降序排列,输应该按升序排列,这样,当单击一个标题时,每个类别中最好的球队总是在顶部。我试过了 sortType="DESCENDING" 在fxml文件中 setSortType(TableColumn.SortType.DESCENDING) 在代码中没有效果。
sortType="DESCENDING"
setSortType(TableColumn.SortType.DESCENDING)
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 } });
1条答案
按热度按时间hyrbngr71#
在我的用例中,二次排序选项更像是一个障碍。我提出的解决方案只允许以一种方式对列进行排序,单击标题可在排序和不用于排序之间切换。
只允许降序排序更简单,并且只需要一个表sortorder的侦听器。但是,仅允许升序排序需要向列sorttypeproperty添加一个侦听器,对于使用shift键进行的多排序,还必须在表sortorder侦听器中强制执行正确的排序。