Mat*_*eak 2 java model-view-controller model javafx javafx-8
我刚学的JavaFX 8.看来,如果你想显示在控制的东西,比方说TableColumn,你需要的东西是实例ObservableValue,例如SimpleStringProperty。
因此,在常用Person对象中,我可能有一个SimpleStringPropertyfor“ firstName”,然后可以将其用作的值TableColumn,如下所示:
TableColumn<Person, String> firstNameCol =
new TableColumn<Person, String>("First Name");
firstNameCol.setCellValueFactory(
new PropertyValueFactory<Person, String>("firstName"));
Run Code Online (Sandbox Code Playgroud)
但是,Person这就是我所谓的“域”类-我的模型可以自由引用和使用的类。我不希望我的域和模型层知道/依赖于使用JavaFX显示应用程序这一事实。
我认为模型/域在这方面应保持纯正性吗?如果是这样,使用JavaFX完成此操作的最佳方法是什么?例如,我是否应该以某种方式为我的域对象编写适配器类以与它们一起呈现ObservableValues?
保持域模型纯净,而不是将其绑定到任何特定的框架当然是明智的,因为您可能需要在其他上下文中使用这些对象(数据库存储,在REST API中公开它们,进行批处理等)。
更改域模型以使用JavaFX属性会给那些在其他情况下需要避免的类增加很多额外的负担。
但是,JavaFX确实具有处理这种情况的标准方法,因此您可以使用域javafx.beans.property.adapter包中的适配器轻松地将域模型连接到其控件,并且以您已经建议的方式工作。
但是,使用这些适配器不会使您的控件像域对象那样响应域对象中的值更改SimpleStringProperty。
如果有问题,这将取决于您的要求,但是如果有问题,则可以考虑修改域模型对象以添加PropertyChangeListener支持。这是一个相对较轻的更改(相对于完整的JavaFX属性),不会使您依赖JavaFX(仅依赖于JavaFX的java.beans问题较少)。
请参阅此答案以获取有关如何直接在JavaFX中直接使用域模型类的完整说明:具有JavaFX属性的JavaBean包装
| 归档时间: |
|
| 查看次数: |
759 次 |
| 最近记录: |