向 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);
这是我的问题:
为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);