Ich versuche derzeit, Daten in meinem TableView
mit FilteredList
mit predicate
zu filtern. Ich habe 2 ComboBoxes
, um die Werte zu filtern.Filtern von JFX TableView mit mehreren Werten
Meine Tabelle enthält Result
. Jede Result
hat eine Student
, dass Student
eine Classroom
hat er in gehört. Das sind die Werte, die ich möchte, dass sie durch filtern.
Ich habe keine Probleme, wenn ich Daten nur mit 1 ComboBox
filtern. Allerdings weiß ich nicht, wie man beides gleichzeitig filtert. Die einzige wirkliche Lösung, die ich mir vorstellen könnte, wäre eine Menge von if
Aussagen in beiden changeListeners
auf jedem ComboBox
und das scheint wie unnötig komplizierte Art und Weise, es zu tun.
Die Werte in meinem TableView
werden mehrfach angezeigt, wenn ich den folgenden Code verwende.
private void filterData(){
ObservableList<Result> observableList = FXCollections.observableList(view.getResultTableView().getAllResultsList());
FilteredList<Result> filteredData = new FilteredList<>(observableList, p -> true);
view.getClassroomComboBox().getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
filteredData.setPredicate(result -> {
if (newValue.equals(view.getAllClassroomsChoice()) || newValue.equals(result.getStudent().getClassroom())) {
return true;
}
else
return false;
});
if(newValue.equals(view.getAllClassroomsChoice())){
view.getStudentComboBox().setAllStudents();
}
else{
view.getStudentComboBox().setStudentsByClassroom((Classroom) newValue);
}
});
view.getStudentComboBox().getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
filteredData.setPredicate(result -> {
if (newValue.equals(view.getAllClassroomsChoice()) || newValue.equals(result.getStudent())) {
return true;
}
else
return false;
});
});
SortedList<Result> sortedData = new SortedList<>(filteredData);
sortedData.comparatorProperty().bind(view.getResultTableView().comparatorProperty());
view.getResultTableView().setItems(sortedData);
}
Vielen Dank, es funktioniert einwandfrei. –