【问题标题】:JavaFx ObservableSet adapterJavaFx ObservableSet 适配器
【发布时间】:2016-04-28 02:10:22
【问题描述】:

我有一个 JavaFx 客户端。我正在使用具有 ObservableSet 作为字段的 bean 作为模型。 我想将这些数据显示到 ListView 中,但我无法将我的字段类型更改为 ObservableList。

我认为我应该编写一种适配器,以使我的 ObservableSet 适应 ObservableList(因为 ListView 需要这样做)。

使用 ObservableList 的代码是:

listView.setItems(myBean.getMyEntitiesList());

我需要以相同的方式设置项目,因为数据列表是从服务器延迟来的,所以我需要在数据到达时更新 UI。

有人能给我一些关于如何实现这种适配器的想法吗?

【问题讨论】:

    标签: java listview javafx observablelist


    【解决方案1】:

    您可以将侦听器添加到集合并在列表更改时更新列表:

    ObservableList<T> items = FXCollections.observableArrayList(myBean.getMyEntitiesList());
    
    myBean.getMyEntitiesList().addListener((Change<? extends T> change) -> {
        if (change.wasAdded()) {
            items.add(change.getElementAdded());
        }
        if (change.wasRemoved()) {
            items.remove(change.getElementRemoved());
        }
    });
    
    listView.setItems(items);
    

    显然,将T 替换为列表/集合中元素的实际类型。

    【讨论】:

    • 好提示,我试过了,但该行在 com.sun.javafx.collections.ObservableSetWrapper$1.hasNext(ObservableSetWrapper. java:214) 在 java.util.AbstractCollection.addAll(AbstractCollection.java:343) 在 javafx.collections.ModifiableObservableListBase.addAll(ModifiableObservableListBase.java:99) 在 javafx.collections.FXCollections.observableArrayList(FXCollections.java:341)
    • 想必你知道如何调试空指针异常。显然,任何人都无法从您显示的堆栈跟踪的 sn-p 调试它。如果您editminimal reproducible example 提出您的问题,我可以为您提供上下文中的答案。
    • 你是对的@James_D,不幸的是,cmets 的字符有限,并将其添加到问题中。这似乎不是一个好主意。
    • 所以显而易见的解决方案是创建一个minimal reproducible example :)。
    • 你又是对的。我尝试简化我的代码并制作一个 MCV 示例:-)
    猜你喜欢
    • 2019-02-10
    • 2023-04-08
    • 1970-01-01
    • 2018-07-26
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    相关资源
    最近更新 更多