gpt4 book ai didi

java - 如何将所有附加的监听器复制到 JavaFX 中的新节点?

转载 作者:行者123 更新时间:2023-12-01 18:00:35 45 4
gpt4 key购买 nike

我有一个ObservableList<DataClass> someData附加一个 ChangeListener (通过 addListener )。该列表由后台线程不时更新。实际上并不是List本身被更新,而是线程返回的新List被保存在成员someData中。 :

...
task.onSuccess(event -> setSomeData(task.getValue());
...
// standard setter generated by IntelliJ
public void setSomeData(ObservableList<DataClass> someData) {
this.someData = someData;
}

现在当我设置someData时使用标准 setter ,数据本身位于新列表中,好吧,但附加到旧列表的所有监听器也都消失了。我不想将整个列表复制到我的旧列表中,因为它可能包含大量元素。

我知道我可以将监听器保存为成员变量并将它们重新分配给新列表,但这会使代码变得困惑,并且需要在 setter 方法中进行一些硬编码(因为 #getListeners 中没有 ObservableList 方法) 。 [编辑:实际上我不能这样做,因为监听器是由另一个类添加的,我不能/不想从此类访问该监听器。]

如何设置保留监听器的新列表而不复制每个元素?

我使用的是最新版本的 Java。

最佳答案

如果没有更多信息,最好的方法似乎是使用 ListProperty 。这是Property<ObservableList<ItemType>> ,而且还实现 ObservableList<ItemType> (内容是属性包装的列表的内容)。

使用此类允许您将监听器添加到 ListProperty ,但仍然保持替换数据的代码简单:

private final ListProperty<DataClass> someData = new SimpleListProperty<>();

public void setSomeData(ObservableList<DataClass> someData) {
this.someData.set(someData);
}

...

this.someData.addListener(someListener);

关于java - 如何将所有附加的监听器复制到 JavaFX 中的新节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41284592/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com