为什么 JavaFX table.getItems().clear() 也清除 ObservableList
Why does JavaFX table.getItems().clear() clear the ObservableList as well
我有一个 JavaFX table 定义为:
TableView<Person> table = new TableView<>;
//Person Class contains firstName,lastName & email properties
//table has three columns First Name, Last Name & Email
ObservableList
个 Person
ObservableList<Person> persons = FXCollections.observableArrayList();
后台服务,其任务是通过向 ObservableList persons
添加条目(Person
个对象)来动态填充 table。
table 绑定为:
table.itemsProperty().bind(service.valueProperty());
一切正常...但我最近发现如果我通过
清除table项
table.getItems().clear();
它不仅清除了table,还清除了ObservableList persons
。我想知道这是否是双向绑定?
即使我在 table 上调用 getItems().clear()
之前解除绑定,它也会产生相同的结果。
有人可以解释一下我没有说到这里的意义吗?
当你设置一个TableView
的itemsProperty
时,你实际上做的是设置存储在属性中的引用(指针)指向指定的ObservableList
,而不是制作指定列表的精确副本。
因此,当您调用 getItems
时,它 returns 对指定列表的引用。
因此,如果您在此列表上调用clear()
,您将清除原来的ObservableList
。
注:
在大多数情况下,您所尝试的绑定是不必要的:
table.itemsProperty().bind(service.valueProperty());
并且只需将 itemsProperty
设置为
就足够了
table.setItems(service.valueProperty().get());
仅当您计划 valueProperty
中存储的引用将在运行时指向 另一个列表 时才需要绑定。在大多数情况下,table 收到有关列表更改的通知就足够了。
我有一个 JavaFX table 定义为:
TableView<Person> table = new TableView<>;
//Person Class contains firstName,lastName & email properties
//table has three columns First Name, Last Name & Email
ObservableList
个 Person
ObservableList<Person> persons = FXCollections.observableArrayList();
后台服务,其任务是通过向 ObservableList persons
添加条目(Person
个对象)来动态填充 table。
table 绑定为:
table.itemsProperty().bind(service.valueProperty());
一切正常...但我最近发现如果我通过
清除table项table.getItems().clear();
它不仅清除了table,还清除了ObservableList persons
。我想知道这是否是双向绑定?
即使我在 table 上调用 getItems().clear()
之前解除绑定,它也会产生相同的结果。
有人可以解释一下我没有说到这里的意义吗?
当你设置一个TableView
的itemsProperty
时,你实际上做的是设置存储在属性中的引用(指针)指向指定的ObservableList
,而不是制作指定列表的精确副本。
因此,当您调用 getItems
时,它 returns 对指定列表的引用。
因此,如果您在此列表上调用clear()
,您将清除原来的ObservableList
。
注:
在大多数情况下,您所尝试的绑定是不必要的:
table.itemsProperty().bind(service.valueProperty());
并且只需将 itemsProperty
设置为
table.setItems(service.valueProperty().get());
仅当您计划 valueProperty
中存储的引用将在运行时指向 另一个列表 时才需要绑定。在大多数情况下,table 收到有关列表更改的通知就足够了。