我有一个ObservableList<Person>
, 其中 aPerson
有firstName
和lastName
属性(以适当的 JavaFX 方式),我想做一个ListView
显示人名并反映列表和列表中各个Person
对象的属性的更改。这怎么做最好?有两个问题:
我们需要
ListView
观察两个名称属性,以便它可以刷新更改。此答案中解释了一种方法(另请参阅此答案)。但是,此解决方案需要将“提取器”传递给 的构造函数ObservableList
,并且我的列表已经存在(作为更大数据模型的一部分)。有人会认为有一种方法可以包装现有的ObservableList
以添加提取器,但我在 API 中看不到它。(嗯,有这个方法,但是它将被包装的列表简单地视为 aList
而不是 aObservableList
,因此不会报告对原始列表的更新。还有这个方法可以创建一个“同步”包装器ObservableList
,但它不包含提取器参数。)也许我应该只实现一种方法来包装自己?我们需要
Person
渲染ListView
. 我知道如何使用自定义ListCell
类来做到这一点,但我希望可能有一种更简单的方法,因为我只显示字符串。依赖Person.toString
不是正确的做法,因为我可能有其他观点Person
需要对 to 进行不同的Person
转换String
。有没有办法通过ListView<Person>
aCallback<Person,String>
(或等效的东西)将项目转换为字符串?
所以,最后,我确实有办法做我想做的事:在 1 中编写我自己的包装器并在 2 中使用自定义单元工厂。我只是觉得这需要我做的工作比我应该做的更多。 d认为是一种比较普遍的情况。有没有我想念的更简单的方法?