2014-12-30 2 views
2

У меня есть ListView в моем приложении, и я хочу сортировать записи. Я также хочу, чтобы список автоматически сортировался, если добавлена ​​новая запись.JavaFX sort 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 

ответ

6

Вы должны использовать SortedList в ListView. То есть сделать

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

О, черт! Я думал, что это не сработает, потому что у меня всегда было исключение UnsupportedOperationException, потому что я добавил новые записи в sortedList. Спасибо !!! –