java - 在数据模型类中,JavaFX可以观察集合

  显示原文与译文双语对照的内容
0 0

这里简单的一块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将自动刷新并将显示新添加的项自动,无需调用任何其他 addrefresh方法。

到目前还好。 但是如果我把什么东西加到原始列表( 如果不包含。 list1) 。 这些更改不会自动传播。 这太有意义,但有时很不方便。

当然,在经典Java应用的Model应用程序不会由 ObservableCollection实例。 所以,一旦你把什么东西加到模型,你可以一直更新 ObservableLists实例,它们都派生自原始列表。 显然这是不可避免的,对?

这引起我好奇,那它还是聪明的办法修改 Collection引用类型( e .g 。 List, Collection, Set, Iterable,- ) 在Model类和替换它们由其 ObservableCollection备选方案从现在开始?

到现在我一直以为这些孩子 ObservableCollection类都只应该用于Gui层的applicaiton,但觉得挺方便到处使用它们有关。

时间:原作者:2个回答

0 0

一般来说,我会避免任何GUI Library依赖项在我model层。 这将限制可能的重用。 这适用于JavaFX依赖项以及为AWT对象如Point / Rectangle中有哪些常用( 错误地) 模型类。

原因很简单: 你的代码将限于android平台和框架,例如不支持任何上面提到的java UI层如awt 。 此外,orm可能会不适应那儿这样的类型此关闭操作要求自定义适配器为你的域对象。

我发现使用稍有修改版本的 MVVM 模式同时也适用于JavaFX 。 在示例中,与普通List像设计模型和适当的propertychange事件。 那ViewModel将工作作为Adapter为Model,提供一个ObservableList其中可以绑定到的视图。

  • 使用* .fxml视图: 就要使用" JavaFX控制器,这将创建绑定到各个ViewModel
  • 使用代码来生成视图: 只需添加一个构造函数依赖项中查看到所需ViewModel和在视图中绑定到属性。

viewModels通常包含一些样板文件代码,你可能希望避免。 但是,VM也给你机会做一些魔术,我如果不包含。 使用反射来生成这些List + 事件自动ObservableCollection 。

一个关于MVC硬道理: swing以及JavaFX一般不用中使用MVC方式( 自控制器合并到视图) 。 mvc并无Components,其中为MVP和MVVM更适合应用程序。

原作者:
...