下面是一段简单的 JavaFX 代码来说明我的问题。
List list1 = new ArrayList();
list1.add("foo");
...
someListView = new ListView<>();
ObservableList someObservableList = FXCollections.observableList(list1);
someListView.setItems(someObservableList);
...
someObservableList.add("bar");
如果我理解正确的话,调用该setItems方法后,不仅列表的内容会显示在ListViewGui 组件中,而且如果ObservableList之后添加项目到实例中,ListView会自动刷新并自动显示新添加的项目,无需调用任何附加add或refresh方法。
到目前为止,一切都很好。但是,如果我在原始列表中添加一些内容(即list1)怎么办。这些更改不会自动传播。这很有意义,但有时很不方便。
当然,在经典的 Java 应用程序中,应用程序的模型不包含ObservableCollection实例。因此,无论何时向模型添加内容,都必须更新ObservableLists从原始列表派生的实例。显然这是不可避免的,对吧?
这让我想知道,从现在开始修改模型类中的Collection类型出现(例如,、、、List... Collection)Set并Iterable用它们的ObservableCollection替代品替换它们是一个聪明的主意吗?
直到现在我一直认为这些ObservableCollection类只应该在应用程序的 Gui 层中使用,但在任何地方都可以使用它们似乎很方便。