Reputation: 11
I have combobox, tableview as TableView<Person>
and 3 columns.
I want to populate the updated data in TableView
as per item I select in combobox.
My Issue: every time I select the item in combobox, the data in table view is added. I want the details to be displayed for the selected item only.
Code:
public class MyTableController {
private TableView<Person> personTableView;
private ObservableList<Person> personTableViewData= FXCollections.observableArrayList();
initialize() {
comboBox.valueProperty().addListener(new ChangeListener<String>() {
@Override public void changed(ObservableValue ov, String oldValue, String newValue) {
List<Person> filteredPersonList =
personList.stream().filter(person -> person.getFirstName().contains(newValue)).collect(Collectors.toList());
personTableViewData.addAll(filteredPersonList);
personTableView.setItems(personTableViewData);
}
}
Upvotes: 0
Views: 611
Reputation: 82461
Use ObservableList.setAll
instead of ObservableList.addAll
or alternatively create a new ObservableList
. Otherwise you're adding new items to the same list on every change instead of replacing the items:
initialize() {
personTableView.setItems(personTableViewData);
comboBox.valueProperty().addListener(new ChangeListener<String>() {
@Override public void changed(ObservableValue ov, String oldValue, String newValue) {
List<Person> filteredPersonList =
personList.stream().filter(person -> person.getFirstName().contains(newValue)).collect(Collectors.toList());
personTableViewData.setAll(filteredPersonList);
}
}
Upvotes: 1