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