为什么JavaFX table.getItems()。clear()也清除了ObservableList

时间:2016-07-06 11:38:57

标签: java data-binding javafx tableview observablelist

我将JavaFX表定义为:

TableView<Person> table = new TableView<>;
//Person Class contains firstName,lastName & email properties
//table has three columns First Name, Last Name & Email

ObservableList的{​​{1}}

Person

后台服务,其任务是通过向ObservableList<Person> persons = FXCollections.observableArrayList(); 添加条目(Person对象)来动态填充表。

表绑定为:

ObservableList persons

一切都很好......但我最近发现,如果我通过

清除表格项目
table.itemsProperty().bind(service.valueProperty());

它不仅清除了表格,还清除了table.getItems().clear(); 。我想知道这是否是双向绑定? 即使我在调用表ObservableList persons之前取消绑定它,它也会产生相同的结果。 有人可以解释一下我没有得到什么意思吗?

1 个答案:

答案 0 :(得分:4)

当你设置TableView的{​​{3}}时,你实际做的是设置存储在属性中的引用(指针),指向指定的ObservableList,而不是制作指定列表的精确副本。

因此,当您调用itemsProperty时,它会返回对指定列表的引用。

因此,如果您在此列表中致电clear(),则会清除原始ObservableList

注意:

在大多数情况下,您尝试过的绑定不是必需的:

table.itemsProperty().bind(service.valueProperty());

只需将itemsProperty设置为

就足够了
table.setItems(service.valueProperty().get());

只有在计划存储在valueProperty中的引用将在运行时指向另一个列表时,才需要绑定。在大多数情况下,表格可以获得有关列表更改的通知。