通知ObservableBuffer监听器内容的成员更改

时间:2016-11-23 11:21:50

标签: scala events javafx scalafx

我有一个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

这个解决方案有效,不变性总是一件好事,所以我可以继续使用它,但仍然好奇这种方法是否是唯一可行的方法。

1 个答案:

答案 0 :(得分:1)

如果您不能使用不可变项,则可以尝试使用javafx.collections.FXCollections.observableList(List list, Callback extractor)构建一个可观察列表。然后使用extractor通知可变元素的更改。另请参阅Combobox refresh value and listview when object content change