我面临的问题很简单,但却是普遍的问题。
问题设置
我有带有主窗口的JavaFX应用程序(主要阶段)。这个阶段使用一些(保持它是一般的)数据。数据可以在启动时以某种方式加载(例如,来自服务器、数据库、XML文件)。数据源(服务器入口、数据库名称、XML文件路径)将由用户提示。(请记住,用户可以取消输入,并且不会加载数据。)
因为我想为用户展示舞台(熟悉应用程序并可能浏览帮助),然后,通过菜单File -> Load data,让他加载数据。
但是由于这个阶段主要依赖于数据,所以我需要来禁用大多数控件,直到用户正确地加载数据并使这个阶段可用为止。
问题
我解决不了这个问题。AFAIK,我有两个选项,如何使大多数阶段禁用,直到数据准备好:
dataNotReadyProperty ),然后,当控制器初始化时,请使用以下内容:
私有void (){ //调用从初始化方法// .doFooButton.disableProperty().bind( Bindings.or( dataNotReadyProperty( );// .}正如您所看到的,这段代码非常丑陋和冗长(特别是当一些控件的残疾是由额外的or或and造成的)。
dataProperty设置变更侦听器,并在加载数据时,对绑定进行适当的初始化。用代码编写的:
私有void (){ //调用从初始化方法// .DoFooButton.setDisabled(真);// .dataProperty().addListener((可观测的,oldValue,newValue) -> { if (oldValue == null & newValue = null) { runInitialization();});}dataProperty().get().cannotBeFooDoneProperty());// .doFooButton.disableProperty().bind}这个解决方案将初始化分为两部分,但是这里的“真正”初始化保持简单易懂。此外,我被迫修改每个控件两次。
结论
你更喜欢什么?你有别的建议吗,如何解决这个问题?
更多信息
发布于 2018-08-30 14:11:01
最后,我决定使用基于@ItachiUchiha的答案的解决方案。
我已经创建了两个不同的窗格,一个用于正确处理数据,另一个只是标签:“加载数据开始工作”和加载按钮。
其余的(其中只有5个)控制我通过绑定禁用/启用(选项1)。因此,“丑陋”代码的数量迅速减少。
https://stackoverflow.com/questions/52012610
复制相似问题