【问题标题】:JavaFX sort ListViewJavaFX 排序 ListView
【发布时间】:2015-02-27 00:00:15
【问题描述】:

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

为此,我使用了 SortedList。 Java API 说“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();
    }
}

命令行输出:

Adam
Brenda
Connie
Derek
Donny
Lynne
Rose
Tony
Williams
Zach

'Foo' added
Adam
Brenda
Connie
Derek
Donny
Foo    <--
Lynne
Rose
Tony
Williams
Zach

【问题讨论】:

    标签: listview sorting javafx sortedlist observablelist


    【解决方案1】:

    您需要在ListView 中使用SortedList。 IE。做

        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);
    

    【讨论】:

    • 天哪!我认为这行不通,因为我总是得到 UnsupportedOperationException,因为我向 sortedList 添加了新条目。谢谢!!!
    【解决方案2】:

    对于 Java 8:

    listView.setItems(names.sorted());
    

    【讨论】:

      【解决方案3】:

      在 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;
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-04
        • 1970-01-01
        相关资源
        最近更新 更多