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