JAVAFX8更新控件型号?

时间:2015-02-19 03:39:15

标签: multithreading javafx-8

UI控件(如LISTVIEW或Tree或...)附带可观察的模型。

当我对该模型进行更改时,我认为javaFX知道如何在显示中自动刷新它。

但是我的问题如下:

是意图方式,想要更新而不是替换此模型的人在具有platform.runlater的后台线程中这样做。

换句话说,一个人需要做一些严肃的计算,并且需要更新ObservableList作为结果。它是预期的方式,在后台线程中执行繁重的工作,并在其结束时,在稍后运行的平台中运行更新?

我问这个是因为这是我迄今为止所做的事情没有问题。但是从我在这里和那里的阅读,尤其是

http://docs.oracle.com/javase/8/javafx/api/javafx/concurrent/Task.html

似乎应该使用其他一些机制。我们应该返回一个完整的列表,而不是更新可观察列表。

但只有当事情来自GUI时,这才有效。如果从后端触发更新,则无法执行此操作。

到目前为止我使用的解决方案始终是保存对可观察列表的引用并通过platform.Runlater更新它。

还有其他办法吗?

非常感谢,

中号

1 个答案:

答案 0 :(得分:1)

您提供的链接有一个示例(PartialResultsTask),它可以按照您的描述执行:它会通过调用ObservableList来更新现有的Platform.runLater()。所以这显然是一种受支持的做事方式。

要从后端更新(即从不知道数据在UI中使用的类),您真的必须为任何人发布一些代码才能提供帮助。但您可以查看this article中使用的技术。虽然他实际上并没有在后面的示例中更新列表,但可以使用相同的策略。