Questo è piuttosto semplice e lineare:
@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();
}
questo può essere raggiunto senza usare experssions Lambda? Il mio progetto java è basato su Java7. Grazie. –
@SachinGadagi Ovviamente. Nel caso più semplice: basta sostituire i lambas con classi interne anonime. – eckig
Adoro lambda, può anche essere semplificato in 'filteredData.setPredicate (newValue.isEmpty()? S -> true: s -> s.getKey(). Contains (newValue));' –