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
Listview JavaFX排序列表视图_Listview_Sorting_Javafx_Sortedlist_Observablelist - Fatal编程技术网

Listview JavaFX排序列表视图

Listview JavaFX排序列表视图,listview,sorting,javafx,sortedlist,observablelist,Listview,Sorting,Javafx,Sortedlist,Observablelist,我的应用程序中有一个ListView,我想对条目进行排序。 如果添加了新条目,我还希望列表自动排序 为此,我使用分类列表。JavaAPI说“ObservableList中的所有更改都会立即传播到SortedList。” 当我运行下面的代码时,命令行的输出正是我所期望的。 但是ListView没有排序 我该怎么做?谢谢 public class Test extends Application { public static final ObservableList names = FXC

我的应用程序中有一个ListView,我想对条目进行排序。 如果添加了新条目,我还希望列表自动排序

为此,我使用分类列表。JavaAPI说“ObservableList中的所有更改都会立即传播到SortedList。”

当我运行下面的代码时,命令行的输出正是我所期望的。 但是ListView没有排序

我该怎么做?谢谢

public class Test extends Application
{
    public static final ObservableList names = FXCollections.observableArrayList();

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        final ListView listView = new ListView(names);
        listView.setPrefSize(200, 250);
        listView.setEditable(true);

        names.addAll("Brenda", "Adam", "Williams", "Zach", "Connie", "Donny", "Lynne", "Rose", "Tony", "Derek");

        listView.setItems(names);
        SortedList<String> sortedList = new SortedList(names);
        sortedList.setComparator(new Comparator<String>(){
            @Override
            public int compare(String arg0, String arg1) {
                return arg0.compareToIgnoreCase(arg1);
            }
        });

        for(String s : sortedList)
            System.out.println(s);
        System.out.println();

        names.add("Foo");
        System.out.println("'Foo' added");
        for(String s : sortedList)
            System.out.println(s);

        StackPane root = new StackPane();
        root.getChildren().add(listView);
        primaryStage.setScene(new Scene(root, 200, 250));
        primaryStage.show();
    }
}
公共类测试扩展应用程序
{
公共静态最终ObservableList name=FXCollections.observableArrayList();
公共静态void main(字符串[]args){
发射(args);
}
@凌驾
公共无效开始(阶段primaryStage){
最终ListView ListView=新ListView(名称);
setPrefSize(200250);
listView.setEditable(true);
名字。addAll(“布伦达”、“亚当”、“威廉姆斯”、“扎克”、“康妮”、“唐尼”、“林恩”、“罗斯”、“托尼”、“德里克”);
setItems(名称);
SortedList SortedList=新的SortedList(名称);
setComparator(新比较器(){
@凌驾
公共整数比较(字符串arg0、字符串arg1){
返回arg0.compareToIgnoreCase(arg1);
}
});
用于(字符串s:sortedList)
系统输出打印项次;
System.out.println();
名称。添加(“Foo”);
System.out.println(“'Foo'添加”);
用于(字符串s:sortedList)
系统输出打印项次;
StackPane root=新的StackPane();
root.getChildren().add(listView);
原始阶段。设置场景(新场景(根,200250));
primaryStage.show();
}
}
命令行输出:

Adam
Brenda
Connie
Derek
Donny
Lynne
Rose
Tony
Williams
Zach

'Foo' added
Adam
Brenda
Connie
Derek
Donny
Foo    <--
Lynne
Rose
Tony
Williams
Zach
亚当 布伦达 康妮 德里克 唐尼 林恩 玫瑰 托尼 威廉姆斯 扎克 "Foo"加入 亚当 布伦达 康妮 德里克 唐尼
Foo您需要使用
列表视图中的
SortedList
。即做

    final ListView listView = new ListView();
    listView.setPrefSize(200, 250);
    listView.setEditable(true);

    names.addAll("Brenda", "Adam", "Williams", "Zach", "Connie", "Donny", "Lynne", "Rose", "Tony", "Derek");

    SortedList<String> sortedList = new SortedList(names);
    listView.setItems(sortedList);
final ListView ListView=new ListView();
setPrefSize(200250);
listView.setEditable(true);
名字。addAll(“布伦达”、“亚当”、“威廉姆斯”、“扎克”、“康妮”、“唐尼”、“林恩”、“罗斯”、“托尼”、“德里克”);
SortedList SortedList=新的SortedList(名称);
listView.setItems(sortedList);

适用于Java 8:

listView.setItems(names.sorted());

在Java 8中,您还可以像这样尝试
listView.getItems().sort([Some Comparator])

listView.getItems().sort((o1,o2)->{
    if(o1.equals(o2)) return 0;
    if(o1.val > o2.val) 
        return 1; 
    else 
        return 0;
});

哦,见鬼!我认为这行不通,因为我总是得到一个不支持的操作异常,因为我在sortedList中添加了新条目。谢谢