通知 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.

构建一个可观察列表