java - 为什么 JavaFX table.getItems().clear() 也会清除 ObservableList

标签 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

PersonObservableList

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/

相关文章:

java - setOnXXX() 方法和 addEventHandler() JavaFx 之间的区别

java - Android 尚不支持 DICOM JPEG 压缩

java - struts.serve.static=true 和 struts,serve.static.browserCache=false 不起作用

java - com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException : Unrecognized field "user_activity"

wpf - 如何在 XAML 中将颜色转换为画笔?

java - 如何针对 gtk 3 库运行 javaFx 应用程序?

java - 如何使我的循环更加通用?

java - 如何从aws iot平台获取数据

java - 如何在内部控制中传递 ObservableField

java - 场景生成器删除 fxml 文件中的导入