2014-12-30 1 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

당신은 ListViewSortedList를 사용해야합니다. 나는. 자바 8의

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

을 지옥 오! sortedList에 새 항목을 추가했기 때문에 항상 UnsupportedOperationException이 발생했기 때문에 작동하지 않을 것이라고 생각했습니다. 감사합니다 !!! –

관련 문제