javafx - javafx TableView: Why does the sortOrder listener does not fire when I sort descending?
问题描述
I have a javafx TableView and I want to know when the sort order of a column changes. I added a listener to the getSortOrder
method. However, it only fires when I sort ascending, and never when I sort descending.
To test this I used this example code
Does anyone have an idea why this doesn't fire? Do I need to add sth else?
The data in the table is in a SortedList
and I added the listener as follows:
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()));
推荐阅读
- amazon-web-services - AWS ALB SSL/TLS 卸载安全性
- google-cloud-platform - terraform 在创建谷歌订阅时失败(与其自己的文档相矛盾)
- azure - Azure 构建任务 - 从所有解决方案中仅构建一个项目
- python - 使用 yolo 运行 Opencv 时出现问题:“AttributeError: module 'cv2.dnn' has no attribute 'DNN_TARGEGT_CPU”
- azure-cosmosdb - 如何从 VM 外部的 firefox OSX 连接到 cosmosdb 模拟器?
- python - 当我尝试使用 winrt 发出通知时,没有显示通知
- python - argparse.ArgumentError:参数--skip-checks:冲突的选项字符串:--skip-checks
- asp.net-core - UseDotNet@2 任务是否安装了 Hosting Bundle?
- django - 如何在 Django 查询中使用列表来添加字段
- django - 无法从 django 中的会话字典的键中提取值