如何在ListView中使用JavaFXFilteredList?

如何在ListView中使用JavaFXFilteredList?,listview,javafx,filtering,Listview,Javafx,Filtering,我的应用程序中有一个包含字符串的ListView。 现在,我想通过输入字段过滤这个列表。但我找到的所有关于FilteredList的示例都是关于如何筛选表的 如何使用FilteredList筛选列表视图?这非常简单明了: @Override public void start(Stage primaryStage) { ObservableList<String> data = FXCollections.observableArrayList(); IntStre

我的应用程序中有一个包含字符串的ListView。 现在,我想通过输入字段过滤这个列表。但我找到的所有关于FilteredList的示例都是关于如何筛选表的


如何使用FilteredList筛选列表视图?

这非常简单明了:

@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();
}
@覆盖
公共无效开始(阶段primaryStage){
ObservableList data=FXCollections.observableArrayList();
range(0,1000).mapToObj(Integer::toString).forEach(data::add);
FilteredList filteredData=新的FilteredList(数据,s->true);
TextField filterInput=新建TextField();
filterInput.textProperty().addListener(obs->{
字符串筛选器=filterInput.getText();
if(filter==null | | filter.length()==0){
setPredicate(s->true);
}
否则{
setPredicate(s->s.contains(filter));
}
});
边框窗格内容=新边框窗格(新列表视图(过滤器数据));
content.setBottom(filterInput);
场景=新场景(内容,500500);
初级阶段。场景(场景);
primaryStage.show();
}

不使用Lambda expressions可以实现这一点吗?我的java项目是基于Java7构建的。谢谢,当然是萨钦加达吉。在最简单的情况下:用匿名内部类替换lambas。我喜欢lambdas,它甚至可以简化为
filteredata.setPredicate(newValue.isEmpty()?s->true:s->s.getKey().contains(newValue))
也可以将
null
设置为谓词,而不是
s->true
,因为这将根据javadocFor multiple fields filtering默认为match all谓词,此链接中的答案将有所帮助。。