通知 ObservableBuffer 侦听器内容的成员更改
Notifying ObservableBuffer listeners on content's member change
我有一个包含许多元素的 ObservableBuffer[T]
和最有可能使用它的 toString()
方法显示这些元素的 ComboBox[T]
。
Class T
(现在假设它是可变的)有一个 name
字段,它在程序执行期间发生变化。
但是(显然)这不会触发 ComboBox
重新加载元素,这是一项要求。
我发现解决这个问题的唯一方法是通过不变性 - 从集合中删除给定元素并添加更新的元素:
/* Context */
val items: ObservableBuffer[T]
val beforeChange: T
val afterChange: T = beforeChange.changed
items -= beforeChange
items += afterChange
这个解决方案有效,不变性始终是一件好事,所以我可能会继续使用它,但仍然很好奇这种方法是否是唯一可行的方法。
如果您不能使用不可变项,您可以尝试使用 javafx.collections.FXCollections.observableList(List list, Callback extractor). Then use the extractor
to notify about the changes to mutable elements. See also Combobox refresh value and listview when object content change.
构建一个可观察列表
我有一个包含许多元素的 ObservableBuffer[T]
和最有可能使用它的 toString()
方法显示这些元素的 ComboBox[T]
。
Class T
(现在假设它是可变的)有一个 name
字段,它在程序执行期间发生变化。
但是(显然)这不会触发 ComboBox
重新加载元素,这是一项要求。
我发现解决这个问题的唯一方法是通过不变性 - 从集合中删除给定元素并添加更新的元素:
/* Context */
val items: ObservableBuffer[T]
val beforeChange: T
val afterChange: T = beforeChange.changed
items -= beforeChange
items += afterChange
这个解决方案有效,不变性始终是一件好事,所以我可能会继续使用它,但仍然很好奇这种方法是否是唯一可行的方法。
如果您不能使用不可变项,您可以尝试使用 javafx.collections.FXCollections.observableList(List list, Callback extractor). Then use the extractor
to notify about the changes to mutable elements. See also Combobox refresh value and listview when object content change.