首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaFX:在数据准备好之前禁用大部分阶段

JavaFX:在数据准备好之前禁用大部分阶段
EN

Stack Overflow用户
提问于 2018-08-24 22:53:59
回答 1查看 72关注 0票数 0

我面临的问题很简单,但却是普遍的问题。

问题设置

我有带有主窗口的JavaFX应用程序(主要阶段)。这个阶段使用一些(保持它是一般的)数据。数据可以在启动时以某种方式加载(例如,来自服务器、数据库、XML文件)。数据源(服务器入口、数据库名称、XML文件路径)将由用户提示。(请记住,用户可以取消输入,并且不会加载数据。)

因为我想为用户展示舞台(熟悉应用程序并可能浏览帮助),然后,通过菜单File -> Load data,让他加载数据。

但是由于这个阶段主要依赖于数据,所以我需要来禁用大多数控件,直到用户正确地加载数据并使这个阶段可用为止。

问题

我解决不了这个问题。AFAIK,我有两个选项,如何使大多数阶段禁用,直到数据准备好:

  1. 禁用“或数据未加载”的绑定 对JavaFX绑定更友好的解决方案是具有布尔属性(如dataNotReadyProperty ),然后,当控制器初始化时,请使用以下内容: 私有void (){ //调用从初始化方法// .doFooButton.disableProperty().bind( Bindings.or( dataNotReadyProperty( );// .}

正如您所看到的,这段代码非常丑陋和冗长(特别是当一些控件的残疾是由额外的orand造成的)。

  1. 当数据准备就绪时禁用并绑定 第二个选择是在启动时(甚至在FXML中)禁用所有内容。并为dataProperty设置变更侦听器,并在加载数据时,对绑定进行适当的初始化。用代码编写的: 私有void (){ //调用从初始化方法// .DoFooButton.setDisabled(真);// .dataProperty().addListener((可观测的,oldValue,newValue) -> { if (oldValue == null & newValue = null) { runInitialization();});}dataProperty().get().cannotBeFooDoneProperty());// .doFooButton.disableProperty().bind}

这个解决方案将初始化分为两部分,但是这里的“真正”初始化保持简单易懂。此外,我被迫修改每个控件两次。

结论

你更喜欢什么?你有别的建议吗,如何解决这个问题?

更多信息

  • 这个阶段确实需要比禁用属性的绑定更多的初始化。
  • 一旦加载了数据,就不能“卸载”(只能由其他数据重新加载)。
  • 大概有。20个控件将在启动时禁用,4个控件可访问。
EN

回答 1

Stack Overflow用户

发布于 2018-08-30 14:11:01

最后,我决定使用基于@ItachiUchiha的答案的解决方案。

我已经创建了两个不同的窗格,一个用于正确处理数据,另一个只是标签:“加载数据开始工作”和加载按钮。

其余的(其中只有5个)控制我通过绑定禁用/启用(选项1)。因此,“丑陋”代码的数量迅速减少。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52012610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档