替换JavaFX中的列排序
我有一个表视图和表列,我用它代替了排序 排序事件:替换JavaFX中的列排序,java,sorting,javafx,javafx-8,Java,Sorting,Javafx,Javafx 8,我有一个表视图和表列,我用它代替了排序 排序事件: nameColumn.sortTypeProperty().addListener( new ChangeListener<SortType>() { @Override public void changed( ObservableValue<? extends SortType> observable, SortType oldValue, SortType newVa
nameColumn.sortTypeProperty().addListener(
new ChangeListener<SortType>() {
@Override
public void changed(
ObservableValue<? extends SortType> observable,
SortType oldValue, SortType newValue) {
FXListSorter.sortPersonByName(fetchResults, newValue);
showFetchResultsByPage();
}
});
nameColumn.sortTypeProperty().addListener(
新的ChangeListener(){
@凌驾
更改公众假期(
在Java8中,要更改列的比较器(例如以不区分大小写的方式对字符串排序),只需
nameColumn.setComparator((name1, name2) -> name1.compareToIgnoreCase(name2));
或者,等效但代码较少:
nameColumn.setComparator(String::compareToIgnoreCase);
通常,您为升序排序提供比较器实现。这将直接用于升序排序(替换默认排序算法),并将用于降序排序和反转降序排序
当排序顺序、排序策略或表中项目的适当状态更改时,将调用TableView
的sort()
方法,该方法基于与排序顺序中的列关联的比较器进行排序。要更改排序行为,需要重写此方法。从概念上讲,类似
TableView<MyType> table = new TableView<MyType>() {
@Override
public void sort() {
super.sort();
showFetchResultsByPage();
}
};
TableView table=newtableview(){
@凌驾
公共无效排序(){
super.sort();
showFetchResultsByPage();
}
};
将为您提供所需的内容,但您需要小心一点,以确保数据列表由正确的方法以正确的顺序访问(以避免并发修改和可能的无限递归)。在Java 8中,更改列的比较器(例如,以不区分大小写的方式对字符串排序)你可以这么做
nameColumn.setComparator((name1, name2) -> name1.compareToIgnoreCase(name2));
或者,等效但代码较少:
nameColumn.setComparator(String::compareToIgnoreCase);
通常,您为升序排序提供比较器实现。这将直接用于升序排序(替换默认排序算法),并将用于降序排序和反转降序排序
当排序顺序、排序策略或表中项目的适当状态更改时,将调用TableView
的sort()
方法,该方法基于与排序顺序中的列关联的比较器进行排序。要更改排序行为,需要重写此方法。从概念上讲,类似
TableView<MyType> table = new TableView<MyType>() {
@Override
public void sort() {
super.sort();
showFetchResultsByPage();
}
};
TableView table=newtableview(){
@凌驾
公共无效排序(){
super.sort();
showFetchResultsByPage();
}
};
将为您提供所需的内容,但您需要小心一点,以确保数据列表是由正确的方法以正确的顺序访问的(以避免并发修改和潜在的无限递归).谢谢你提供的信息,我一定会好好利用它,但我的问题是取消对TableColumn的排序,同时执行我的排序。有什么建议吗?James_D回答的最后一段是你的答案。你可以使用上面列出的代码覆盖默认行为,然后在行后包含你的代码super.sort();
作为我之前评论的补充,我不得不删除super.sort()行
让它工作起来。感谢您提供的信息,我一定会好好利用它,但我的问题是取消对TableColumn的排序,同时执行我的排序。有什么建议吗?James_D回答的最后一段是您的答案。您可以使用上面列出的代码覆盖默认行为,然后包括您的在super.sort();
一行之后编码作为我之前评论的补充,我必须删除super.sort();
一行才能让它工作。