【问题标题】:What is a good practice to handle a lot of checkboxes in JavaFX在 JavaFX 中处理大量复选框的好习惯是什么
【发布时间】:2014-10-09 17:16:26
【问题描述】:

我需要构建一个视图,它有一个 4 层嵌套的 Multi-Accordion,里面有很多复选框。整个 Accordions 中总共可能有大约 30-40 个复选框。

下一步将是,我在这一切背后有某种逻辑。根据复选框的选择组合,我将相应地更改文本标签。

我的想法是:我把所有这些复选框都打上来,并给它们一个数字 fx:id 代表嵌套手风琴图中的位置。类似“1_1”或“2_4_1”的东西。 之后,我构建了一个 ChangeListener,调用一个复选框选择方法。我可以查找选中框的 Id,在我的数据中查找它(查看属于它的 Text 以及是否有任何规则干扰其他框)并在将 id 及其文本放入 Map 时相应地处理逻辑或列出以供以后保存并跟踪选中的框。

现在我知道了,获取 fx:id 并不是 JavaFX 想要我做的。我也无法在 FXML 内的自定义属性中提供自定义 ID(找不到任何关于此的内容)。 我现在的知识已经接近尾声了(我刚开始接触 JavaFX 并掌握了一些基本的 Java 知识),在我看来,我从错误的角度来处理这个话题。

我现在的问题是:根据检查的框处理数十个复选框并触发代码中的逻辑的最佳实践是什么,而不为每个复选框编写 ChangeListener 给我留下一些(imo)丑陋的代码一路走来。

编辑:我忘了提一下:我确实通过编写一个自定义 CheckboxChangeListener 来实现某种功能解决方案,该 CheckboxChangeListener 引用了调用 addListener 方法的元素并在此引用上使用“getId()”。不过我知道,这个方法引用了 fxml 元素的 css:id 而不是它的 fx:id,我不太确定这是否是正确的方法

【问题讨论】:

    标签: java user-interface javafx


    【解决方案1】:

    您应该使用 javafx 研究数据绑定。例如:

        CheckBox cb1 = new CheckBox("1");
        CheckBox cb2 = new CheckBox("2");
    
        BooleanProperty isCb1Selected = cb1.selectedProperty();
        BooleanProperty isCb2Selected = cb2.selectedProperty();
    
        Textfield foo = new TextField().visibleProperty().bind(isCb1Selected.and(isCb2Selected));
    

    如果未选中至少一个复选框,这将隐藏文本字段 foo。
    您可以找到其他示例 here 和 here an oracle tutorial

    【讨论】:

    • 感谢资源。我会调查一下。我希望我可以使用某种标识符(这是所有这些 fx:id 东西背后的原因),因为逻辑基于我需要查找的数据库中的一些数据。因此,我需要单独识别复选框。您认为通过复选框的“文本”执行此操作是一种不好的做法吗?我可以将“1_1”等格式的ID替换为Checkbox的实际文本并通过“getText()”进行检查,对吧?
    • 将 ID 设为文本将是不好的做法,但只要它有效并且用户不会被激怒,为什么不呢?但我不明白你为什么需要它。假设你给一个复选框 fx:id cb1_1 然后你可以通过@FXML Checkbox cb1_1 将它注入你的控制器并使用我向你展示的条件绑定(所以你不需要我的前两行示例)。
    • 啊!现在我明白你的意思了!这实际上就是我现在正在做的事情。要查找复选框的逻辑规则,我在 Checkbox 上使用 getId(),生成“cb1_1”,然后对照数据库检查以获取其背后的逻辑。我只是不确定这是否是要走的路,因为据我所知,不应该将“getId()”用于此目的。不过我不确定,想检查一下我的思维过程。
    猜你喜欢
    • 1970-01-01
    • 2015-03-28
    • 2013-01-04
    • 2018-04-07
    • 2016-11-22
    • 2017-11-23
    • 1970-01-01
    • 2023-03-29
    • 2017-04-03
    相关资源
    最近更新 更多