I'm trying to use a text field to filter through a table view, I want the text field (txtSearch) to look for "nhs number", "first name", "last name" and "sort category", I tried to implement various solutions on the Internet and no luck. but I'm still new to all of this, so I apologize if this was asked poorly. Any help would be greatly appreciated, my code is below.
Public class QueueTabPageController implements Initializingable {
@FXML
private TableView<Patient> tableView;
@FXML
private TableColumn<Patient, String> NHSNumberColumn;
@FXML
private TableColumn<Patient, String> firstNameColumn;
@FXML
private TableColumn<Patient, String> lastNameColumn;
@FXML
private TableColumn<Patient, String> timeEnteredColumn;
@FXML
private TableColumn<Patient, String> triageAssessmentColumn;
@FXML
private TextField filterField;
@FXML
private QueueTabPageController queueTabPageController;
private ObservableList<Patient> tableData;
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
assert tableView != null : "fx:id=\"tableView\" was not injected: check your FXML file 'FXMLQueueTabPage.fxml'";
NHSNumberColumn.setCellValueFactory(new PropertyValueFactory<Patient, String>("nhsNumber"));
firstNameColumn.setCellValueFactory(new PropertyValueFactory<Patient, String>("firstName"));
lastNameColumn.setCellValueFactory(new PropertyValueFactory<Patient, String>("lastName"));
timeEnteredColumn.setCellValueFactory(new PropertyValueFactory<Patient, String>("timeEnteredString"));
triageAssessmentColumn.setCellValueFactory(new PropertyValueFactory<Patient, String>("triage"));
displayQueue(Queue.queue);
FilteredList<Patient> filteredData = new FilteredList<>(tableData,
p -> true);
filterField.textProperty().addListener(
(observable, oldValue, newValue) -> {
filteredData.setPredicate(Patient -> {
if (newValue == null || newValue.isEmpty()) {
return true;
}
String lowerCaseFilter = newValue.toLowerCase();
if (Patient.getFirstName().toLowerCase()
.contains(lowerCaseFilter)) {
return true;
} else if (Patient.getLastName().toLowerCase()
.contains(lowerCaseFilter)) {
return true;
}
return false;
});
});
SortedList<Patient> sortedData = new SortedList<>(filteredData);
sortedData.comparatorProperty().bind(tableView.comparatorProperty());
tableView.setItems(sortedData);
}
I get an error here (step 4):
(TableView.comparatorProperty());
and (step 5)
TableView.setItems(sortedData);
saying: It is not possible to make a static reference to the non-static setItems (ObservableList) method of type TableView