向 TableColumn 添加自定义排序算法

Add custom sorting algorithm to TableColumn

这是我的问题:

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 中的显示是正确的。但我想做的是单击 header 列,从而调用我的排序算法。

一般情况: table 中的数据在 ObservableList 中,它被包裹在 SortedList.

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

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

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);