Я настраиваю фильтр JavaFX TableView, используя компонент TextField, и я пытаюсь реализовать фильтр jar ControlxFX, где я могу фильтровать столбцы, как на листе Excel. Добавление метода TableFilter.forTableView(tableView)
в конец кода и при вводе букв в TextField отфильтрует просмотр таблицы, но вернет java.lang.NullPointerException
с большой задержкой в результатах поиска.
Удаление метода TableFilter.forTableView(tableView)
устранит проблему, но Фильтр из столбцов останется с теми же значениями, даже если просмотр таблицы покажет меньше.
/MainController.php
.....
@FXML
private TextField searchPacientTextField;
......
@FXML
// On Key Released
private void searchPacients(KeyEvent event) {
FilteredList<Pacients> filterpacients = new FilteredList<>(listp, e -> true);
searchPacientTextField.setOnKeyReleased(e -> {
searchPacientTextField.textProperty().addListener((observable, oldValue, newValue) -> {
filterpacients .setPredicate((Predicate<? super Pacients>) pacient -> {
if (newValue == null || newValue.isEmpty()) {
return true;
}
String lowerCaseFilter = newValue.toLowerCase();
if (String.valueOf(pacient.getID()).contains(lowerCaseFilter)) {
return true;
} else if (pacient.getNumeP().toLowerCase().contains(lowerCaseFilter)) {
return true;
} else if (pacient.getMedic().toLowerCase().contains(lowerCaseFilter)) {
return true;
} else if (pacient.getTehnician().toLowerCase().contains(lowerCaseFilter)) {
return true;
}
return false;
});
});
SortedList<Pacients> sortedData = new SortedList<>(filterpacients );
sortedData.comparatorProperty().bind(tableView.comparatorProperty());
tableView.setItems(sortedData);
//The ControlsFX Table Filter
TableFilter.forTableView(tableView).apply();
});
}
Удаление строки TableFilter.forTableView(tableView).apply();
все равно отсортирует список, но не вернет java.lang.NullPointerException
.
С линией
Поиск имени
![](https://i.ibb.co/BCv1kZD/1.png)
Возвращает результаты и при щелчке правой кнопкой мыши на столбце «Nume Pacient» возвращаются те же результаты
![](https://i.ibb.co/m0N8dq9/2.png)
Вернет много исключений
![](https://i.ibb.co/Bsp9GRM/4.png)
Линия удалена
Поиск имени
![](https://i.ibb.co/BCv1kZD/1.png)
Возвращает результаты и при щелчке правой кнопкой мыши по столбцу «Nume Pacient» не возвращает те же результаты и сохраняет старый список
![](https://i.ibb.co/b3Qpw7f/3.png)
Не вернет никаких исключений, и поиск не будет задерживаться, как указано выше