Я создал этот GUI в JavaFXTableView не показывая данные до фильтра
Java FX TableView http://image.prntscr.com/image/7b207d4f7b064d8fa8c827e295a8035e.png
Проблема не в том, что, когда я пытаюсь запустить функцию readList
, после этого ничего будет показана в таблице, но, если я попытаюсь что-то фильтровать, появятся данные.
Что я сделал не так? Разве SortedList не связан с фильтром, связанным с ObservableCollection, который смотрит список лиц? Не следует автоматически обновлять TableView
всякий раз, когда я что-то меняю в этом списке?
Это контроллер
public class LetturaAwpController {
List<Person> persons= new LinkedList<Person>();
ObservableList<Person> observablePerson = FXCollections.observableList(persons);
@FXML
private TextField txtUser;
@FXML
private TextField txtPass;
@FXML
private TextField txtFiltraId;
@FXML
private CheckBox chkMag;
@FXML
private TableView<Person> tblMain;
@FXML
private TableColumn<Person, String> colId;
@FXML
void doRead(ActionEvent event) {
if(txtPass.getText().isEmpty() | txtUser.getText().length() < 6)
return;
if (persons== null)
persons= model.readList(txtUser.getText(), txtPass.getText());
else
persons.addAll(model.readList(txtUser.getText(), txtPass.getText()));
}
@FXML
void initialize() {
FilteredList<Person> filteredPerson= new FilteredList<>(observablePerson , p-> true);
colId.setCellValueFactory(new PropertyValueFactory<Person,String>("idApparecchio"));
txtFiltraId.textProperty().addListener((observable, oldValue, newValue)-> {
filteredSlot.setPredicate(person-> {
if (newValue == null || newValue.isEmpty()){
return true;
}
String lowerCaseFilter = newValue.toLowerCase();
if(person.getIdApparecchio().toLowerCase().contains(lowerCaseFilter)){
return true;
} else if (person.getNomeModello().toLowerCase().contains(lowerCaseFilter)){
return true;
}
return false;
});
});
SortedList<Person> sortedData = new SortedList<>(filteredPerson);
// 4. Bind the SortedList comparator to the TableView comparator.
sortedData.comparatorProperty().bind(tblMain.comparatorProperty());
// 5. Add sorted (and filtered) data to the table.
tblMain.setItems(sortedData);
}
}