Javafx TableView数据刷新

时间:2017-07-09 13:32:06

标签: javafx tableview

我有组合框,tableview为TableView<Person>和3列。 我想根据我在组合框中选择的项目填充TableView中的更新数据。

我的问题:每次我在组合框中选择项目时,都会添加表格视图中的数据。我希望仅显示所选项目的详细信息。

代码:

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);

            } 
        }

1 个答案:

答案 0 :(得分:1)

使用ObservableList.setAll代替ObservableList.addAll,或者创建新的ObservableList。否则,您在每次更改时都会将新项目添加到同一列表中,而不是替换项目:

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);
        } 
    }