web-dev-qa-db-ja.com

ListViewでJavaFXFilteredListを使用するにはどうすればよいですか?

アプリケーションに文字列を含むListViewがあります。ここで、このリストを入力フィールドでフィルタリングしたいと思います。しかし、私が見つけたFilteredListsに関するすべての例は、テーブルをフィルタリングする方法に関するものです。

FilteredListを使用してListViewをフィルタリングするにはどうすればよいですか?

11
Franz Deschler

それはかなり単純で簡単です:

@Override
public void start(Stage primaryStage) {

    ObservableList<String> data = FXCollections.observableArrayList();
    IntStream.range(0, 1000).mapToObj(Integer::toString).forEach(data::add);

    FilteredList<String> filteredData = new FilteredList<>(data, s -> true);

    TextField filterInput = new TextField();
    filterInput.textProperty().addListener(obs->{
        String filter = filterInput.getText(); 
        if(filter == null || filter.length() == 0) {
            filteredData.setPredicate(s -> true);
        }
        else {
            filteredData.setPredicate(s -> s.contains(filter));
        }
    });


    BorderPane content = new BorderPane(new ListView<>(filteredData));
    content.setBottom(filterInput);

    Scene scene = new Scene(content, 500, 500);
    primaryStage.setScene(scene);
    primaryStage.show();
}
18
eckig