如何观察物品' ObservableList中的属性更改

时间:2016-03-23 15:15:13

标签: javafx javafx-8 observablelist

我正在开发一些使用JavaFX的信使只是为了更熟悉这项技术。

Contact有两个主要属性:User和最后Message

我需要展示

  1. 包含最新消息的联系人列表
  2. 按名称排序的联系人列表
  3. 到目前为止,我找到了两个解决方案

    第一个解决方案是让Contact不可变。因此,每当新消息到达或用户的信息发生变化时,都需要更换联系人。它有效,但在更新时在ListView中联系闪烁

    第二个解决方案是使用ObjectProperty

    public class Contact {
        private final ObjectProperty<User> user = ...; 
        private final ObjectProperty<Message> lastMessage = ...; 
    }
    

    在这种情况下,我必须创建自定义ObservableList,以便在向列表中添加/删除Contact时向Contact的属性添加/删除侦听器。这是必需的,因为两个列表都应该自动排序。

    因此两种解决方案都有缺点。

    请提供有关如何实现目标的建议。

1 个答案:

答案 0 :(得分:3)

FXCollections类中,有一种方法使用&#34;提取器&#34;函数告诉列表列表项中的哪些属性应该触发列表更改事件:

https://docs.oracle.com/javase/8/javafx/api/javafx/collections/FXCollections.html#observableArrayList-javafx.util.Callback-

这将为您提供与第二种解决方案相同的方法,但无需编写代码来自行管理监听器。