JavaFX TableView несколько фильтров - PullRequest
0 голосов
/ 29 апреля 2020

Я работаю для фильтрации данных TableView . В частности, мне нужно использовать одновременно несколько фильтров типа:

  • TextField
  • RadioMenuItem

Затем мне нужно чтобы поместить их в логы 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);    

Поэтому, когда я пытаюсь использовать их на в то же время , включена только последняя .

Я уверен, что между ними нет И , как я могу решить эту проблему?

...