javafx TableView:为什么在我进行降序排序时,sortOrder侦听器不会启动?

javafx TableView:为什么在我进行降序排序时,sortOrder侦听器不会启动?,javafx,observable,javafx-tableview,Javafx,Observable,Javafx Tableview,我有一个JavaFXTableView,我想知道列的排序顺序何时改变。我在getSortOrder方法中添加了一个侦听器。然而,它只在我按升序排序时触发,而在按降序排序时从不触发。 为了测试这个,我用了这个 有人知道为什么它不会开火吗?我还需要补充什么吗 表中的数据位于SortedList中,我添加了侦听器,如下所示: personTable.getSortOrder().addListener(this::onColumnSortOrderChanged) onColumnSortOrderC

我有一个JavaFXTableView,我想知道列的排序顺序何时改变。我在
getSortOrder
方法中添加了一个侦听器。然而,它只在我按升序排序时触发,而在按降序排序时从不触发。 为了测试这个,我用了这个 有人知道为什么它不会开火吗?我还需要补充什么吗

表中的数据位于
SortedList
中,我添加了侦听器,如下所示:

personTable.getSortOrder().addListener(this::onColumnSortOrderChanged)

onColumnSortOrderChanged(ListChangeListener.Change>Change)上的私有void{
布尔值=假;
while(change.next()){
更改=正确;
}
如果(更改){
if(change.getList().isEmpty()){
System.out.println(“可观察为空”);
}否则{
TableColumn column=change.getList().get(0);
System.out.println(“排序:”+column.getText()+“排序类型”+column.getSortType());
}
}
}

可以使用多列进行排序(例如,首先按姓氏对人员进行排序,然后使用给定姓名作为次要标准)。可以按住Shift键添加多列。如果要在列的升序和降序排序顺序之间进行更改,则此列表不会更改

要同时侦听这些更改,您需要侦听属性

// print sort order on change
table.getSortOrder().addListener((Observable o) -> {
    System.out.println("sort order: "+ table.getSortOrder().stream().map(TableColumn::getText).collect(Collectors.joining(", ", "{", "}")));
});

// print sortType on change
column.sortTypeProperty().addListener(o -> System.out.println("sortType changed to: " + column.getSortType()));

可以使用多列进行排序(例如,首先按姓氏对人员进行排序,然后使用给定姓名作为次要标准)。可以按住Shift键添加多列。如果要在列的升序和降序排序顺序之间进行更改,则此列表不会更改

要同时侦听这些更改,您需要侦听属性

// print sort order on change
table.getSortOrder().addListener((Observable o) -> {
    System.out.println("sort order: "+ table.getSortOrder().stream().map(TableColumn::getText).collect(Collectors.joining(", ", "{", "}")));
});

// print sortType on change
column.sortTypeProperty().addListener(o -> System.out.println("sortType changed to: " + column.getSortType()));