我正在使用TextField组件设置JavaFX TableView过滤器,并尝试实现jar ControlxFX过滤器,在其中可以过滤Excel表格中的列。在代码末尾添加方法TableFilter.forTableView(tableView)
并在TextField中键入字母时,它会过滤tablewview,但会返回java.lang.NullPointerException
,但搜索结果的延迟很大。
删除方法TableFilter.forTableView(tableView)
将“解决”问题,但是即使Tablewview显示的内容少于该值,列中的“过滤器”仍将保持相同的值。
/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
。
搜索名称
返回结果,右键单击“ Nume Pacient”列将返回相同的结果
将返回很多异常
搜索名称
返回结果,右键单击“ Nume Pacient”列将不会返回相同结果,并将保留旧列表
不会返回任何异常,并且搜索不会像上面那样延迟