java - 向 TableColumn 添加自定义排序算法

标签 java sorting javafx tableview

这是我的问题:

TableColumn 的默认排序设置自定义排序算法。

背景: 作为示例列,我想使用将 IPv4 地址表示为 String 的列。因此默认排序是字典顺序(1.1.1.1、1.1.1.10、1.1.1.2)。但我想要进行数字排序(1.1.1.1、1.1.1.2、1.1.1.10)。

排序算法不是问题。我可以使用 Button 触发此排序,并且 TableView 中的显示是正确的。但我想做的是单击列标题,从而调用我的排序算法。

一般条件: 表中的数据位于 ObservableList 中,它包装在 SortedList 中。

此时我的问题是:我怎样才能实现这一点?

最佳答案

您需要绑定(bind)比较器。当您单击列标题时,将使用该列的比较器,如果再次单击,将使用该比较器的相反顺序。如果您使用 SortedList,并且每列都有不同的比较器,请将列表的比较器属性绑定(bind)到表的比较器属性。这样,当您单击标题时,您的列表也会收到通知,并且您的数据也会更新:

columnA.setComparator(comparator1);
columnB.setComparator(comparator2);
columnC.setComparator(comparator3);

ObservableList<MyData> items = FXCollections.observableArrayList();
SortedList<MyData> sortedList = new SortedList<>(items);
sortedList.comparatorProperty().bind(tableView.comparatorProperty());

tableView.setItems(sortedList);

关于java - 向 TableColumn 添加自定义排序算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60568476/

相关文章:

java - Android - 接口(interface)回调抛出空指针异常

java - 在条件构造函数上使用 @RequiredArgsConstructor

java - 如何强制 HTTP Listener Connector 成为一种方式?

java - 如何在 JavaFX 中的 Accordion 中的 TitledPanes 之间添加填充

JavaFx TextField 货币格式过滤器

java - 手动编写的 XSD 和生成的 java 类会导致使用 JAXB 出现 UnmarshallException

c++ - 为什么std::unique调用std::sort?

php - 根据上下文对 MySQL 结果进行排序

java - 如何在 Java 7 中对 .class 文件中的属性实现自定义排序

java - 为什么element在show stage的时候总是被蓝色包围