Raheem
Raheem

Reputation: 11

Javafx TableView data refresh

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

Answers (1)

fabian
fabian

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

Related Questions