Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
替换JavaFX中的列排序_Java_Sorting_Javafx_Javafx 8 - Fatal编程技术网

替换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();
一行才能让它工作。