我有一个 JavaFX 表定义为:
TableView<Person> table = new TableView<>;
//Person Class contains firstName,lastName & email properties
//table has three columns First Name, Last Name & Email
Person
的 ObservableList
ObservableList<Person> persons = FXCollections.observableArrayList();
后台服务,其任务是通过将条目(Person
对象)添加到 ObservableList person
来动态填充表。
表绑定(bind)为:
table.itemsProperty().bind(service.valueProperty());
一切工作正常...但我最近发现,如果我清除表格项目
table.getItems().clear();
它不仅清除表,还清除 ObservableList 人员
。我想知道这是否是双向绑定(bind)?
即使我在调用表上的 getItems().clear() 之前取消绑定(bind)它,它也会产生相同的结果。
有人可以解释一下我在这里没有明白的重点是什么吗?
最佳答案
当您设置itemsProperty
时对于 TableView
,您实际上要做的是设置存储在属性中的引用(指针),以指向指定的 ObservableList
,而不是制作一个精确的副本指定的列表。
因此,当您调用getItems
时,它返回对指定列表的引用。
因此,如果您在此列表上调用clear()
,则会清除原始ObservableList
。
注意:
在大多数情况下,您所尝试的绑定(bind)是不必要的:
table.itemsProperty().bind(service.valueProperty());
只需将 itemsProperty
设置为
table.setItems(service.valueProperty().get());
仅当您计划将 valueProperty
中存储的引用在运行时指向另一个列表时,才需要绑定(bind)。在大多数情况下,表获取有关列表更改的通知就足够了。
关于java - 为什么 JavaFX table.getItems().clear() 也会清除 ObservableList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38223115/