Я работаю для фильтрации данных TableView . В частности, мне нужно использовать одновременно несколько фильтров типа:
Затем мне нужно чтобы поместить их в логы AND c.
В настоящее время оба кода работают одинаково правильно, под кодом:
@FXML private TextField filterField;
@FXML private RadioMenuItem classA;
.......
ObservableList<MapEntry<String,FXTargetBean>> FXTargetEntry = FXCollections.observableArrayList();
FilteredList<MapEntry<String,FXTargetBean>> filteredData = new FilteredList<>(FXTargetEntry, p-> true);
/*
* Radio Menu Item Filter
*/
classA.selectedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
filteredData.setPredicate(p -> {
String itemString = "Class A".toLowerCase();
if(newValue.booleanValue() == false ) {
return true;
}
if (newValue.booleanValue() == true) {
if(p.getValue().getAISDevice() != null) {
if(p.getValue().getAISDevice().toLowerCase().contains(itemString)) {
FXtableTarget.refresh();
return true;
}
}
}
return false;
});
}
});
/*
* Text Field Filter
*/
filterField.textProperty().addListener((obsrvable, oldVlue, newValue)-> {
filteredData.setPredicate( vessel-> {
if(newValue == null || newValue.isEmpty()) {
return true;
}
String lowerCaseFilter = newValue.toLowerCase();
String entryName = vessel.getValue().getName();
if(entryName != null) {
if(entryName.toLowerCase().contains(lowerCaseFilter)) {
FXtableTarget.refresh();
return true;
}
}
return false;
});
});
SortedList<MapEntry<String,FXTargetBean>> sortedData = new SortedList<>(filteredData);
sortedData.comparatorProperty().bind(FXtableTarget.comparatorProperty());
FXtableTarget.setItems(sortedData);
Поэтому, когда я пытаюсь использовать их на в то же время , включена только последняя .
Я уверен, что между ними нет И , как я могу решить эту проблему?