我有一个ObservableBuffer[T]
,其中包含许多元素和ComboBox[T]
,这些元素最有可能使用toString()
方法显示这些元素。
类T
(现在让我们假设它是可变的)有一个name
字段,在执行程序时会被更改。
然而(显然)这并没有触发ComboBox
重新加载元素,这是一项要求。
只有这样,我发现是通过不变性 - 从集合中删除给定元素并添加更新的元素:
/* Context */
val items: ObservableBuffer[T]
val beforeChange: T
val afterChange: T = beforeChange.changed
items -= beforeChange
items += afterChange
这个解决方案有效,不变性总是一件好事,所以我可以继续使用它,但仍然好奇这种方法是否是唯一可行的方法。
答案 0 :(得分:1)
如果您不能使用不可变项,则可以尝试使用javafx.collections.FXCollections.observableList(List list, Callback extractor)构建一个可观察列表。然后使用extractor
通知可变元素的更改。另请参阅Combobox refresh value and listview when object content change。