【发布时间】:2016-01-18 02:14:44
【问题描述】:
我有一个ObservableList<Person>,其中一个Person 有firstName 和lastName 属性(以适当的JavaFX 方式),我想创建一个ListView 来显示人和反映列表中的更改以及列表中各个 Person 对象的属性。这怎么做最好?有两个问题:
我们需要让
ListView观察两个名称属性,以便它可以刷新更改。在this answer 中解释了一种方法(另请参见this answer)。但是,此解决方案需要将“提取器”传递给ObservableList的构造函数,并且我的列表已经存在(作为更大数据模型的一部分)。有人会认为有一种方法可以包装现有的ObservableList以添加提取器,但我在 API 中看不到它。 (好吧,有this method,但它会将被包装的列表视为简单的List而不是ObservableList,因此不会报告对原始列表的更新。还有this method 创建一个“ObservableList的同步”包装器,但它不包含提取器参数。)也许我应该自己实现一个方法来包装自己?我们需要在
ListView中渲染Person项。我知道如何使用自定义ListCell类来做到这一点,但我希望可能有更简单的方法,因为我只显示字符串。依赖Person.toString不是正确的做法,因为我可能对Person有其他看法,需要将Person不同的转换为String。有什么方法可以传递ListView<Person>和Callback<Person,String>(或等效的东西)来将项目转换为字符串?
所以,最后,我确实有办法做我想做的事:在 1 中编写我自己的包装器并在 2 中使用自定义单元工厂。我只是觉得这需要我做的工作比它应该做的要多我认为这是一个相对常见的情况。我错过了更简单的方法吗?
【问题讨论】:
-
@James_D:谢谢!我在搜索中不知何故没有到达那个页面。我今天刚开始接触JavaFX,试图找到这种信息有点令人沮丧......
标签: listview javafx observablelist