下面是一段简单的JavaFX代码,以说明我的问题。JavaFX - 数据模型类中的可观察集合
List list1 = new ArrayList();
list1.add("foo");
...
someListView = new ListView<>();
ObservableList someObservableList = FXCollections.observableList(list1);
someListView.setItems(someObservableList);
...
someObservableList.add("bar");
如果我理解正确,调用setItems
方法后,不仅将在ListView
GUI组件显示在列表中的内容,而且还当项目被添加到事后ObservableList
情况下,ListView
会自动刷新并自动显示新增项目,无需调用任何额外的add
或refresh
方法。
到目前为止,一切都很好。但是如果我在原始列表中添加一些东西(即list1
)。这些更改不会自动传播。它非常有意义,但有时不方便。
当然,在典型的Java应用程序中,应用程序的模型不包含ObservableCollection
实例。因此,无论何时向模型添加内容,您都必须更新从原始列表派生的ObservableLists
实例。显然这是不可避免的,对吧?
这让我想知道,这是一个聪明的想法修改Collection
类型事件(例如List
,Collection
,Set
,Iterable
,...)在模型类,从现在起通过其ObservableCollection
的替代品取代他们?
到目前为止,我始终认为这些ObservableCollection
类只能用于应用程序的Gui层,但在各处使用它们似乎相当方便。
此外,在您的模型中使用JavaFX Observables会立即添加jfxrt.jar的依赖项,这会在与其他非JavaFX项目共享模型时导致问题。 – OttPrime