javafx TableView:为什么当我降序排序时 sortOrder 侦听器不触发?
javafx TableView: Why does the sortOrder listener does not fire when I sort descending?
我有一个 javafx TableView,我想知道列的排序顺序何时更改。我在 getSortOrder
方法中添加了一个监听器。但是,它仅在我排序 ascending 时触发,而在我排序 descending 时从不触发。
为了测试这一点,我使用了这个 example code
有谁知道为什么这不火?我还需要添加其他东西吗?
table中的数据在SortedList
中,我添加了监听器如下:
personTable.getSortOrder().addListener(this::onColumnSortOrderChanged);
private void onColumnSortOrderChanged(ListChangeListener.Change<? extends TableColumn<Person, ?>> change) {
boolean changed = false;
while (change.next()) {
changed = true;
}
if (changed) {
if (change.getList().isEmpty()) {
System.out.println("observable is empty");
} else {
TableColumn<Person, ?> column = change.getList().get(0);
System.out.println("Sorted: " + column.getText() + " sort type " + column.getSortType());
}
}
}
可以使用多列进行排序(例如先按姓氏排序,然后使用名字作为次要标准)。您可以按住 Shift 来添加多列。如果您在列的升序和降序排序顺序之间进行更改,则此列表不会更改。
要收听这些变化,您需要收听 TableColumn.sortType
属性。
// 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()));
我有一个 javafx TableView,我想知道列的排序顺序何时更改。我在 getSortOrder
方法中添加了一个监听器。但是,它仅在我排序 ascending 时触发,而在我排序 descending 时从不触发。
为了测试这一点,我使用了这个 example code
有谁知道为什么这不火?我还需要添加其他东西吗?
table中的数据在SortedList
中,我添加了监听器如下:
personTable.getSortOrder().addListener(this::onColumnSortOrderChanged);
private void onColumnSortOrderChanged(ListChangeListener.Change<? extends TableColumn<Person, ?>> change) {
boolean changed = false;
while (change.next()) {
changed = true;
}
if (changed) {
if (change.getList().isEmpty()) {
System.out.println("observable is empty");
} else {
TableColumn<Person, ?> column = change.getList().get(0);
System.out.println("Sorted: " + column.getText() + " sort type " + column.getSortType());
}
}
}
可以使用多列进行排序(例如先按姓氏排序,然后使用名字作为次要标准)。您可以按住 Shift 来添加多列。如果您在列的升序和降序排序顺序之间进行更改,则此列表不会更改。
要收听这些变化,您需要收听 TableColumn.sortType
属性。
// 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()));