Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaFX中处理大量复选框的好做法是什么_Java_User Interface_Javafx - Fatal编程技术网

在JavaFX中处理大量复选框的好做法是什么

在JavaFX中处理大量复选框的好做法是什么,java,user-interface,javafx,Java,User Interface,Javafx,我需要建立一个视图,它有一个4层嵌套的多个手风琴,里面有很多复选框。整个手风琴可能总共有30-40个复选框 下一步将是,我在这一切背后有某种逻辑。根据复选框的选择组合,我将相应地更改文本标签 我的思考过程是:我设置所有这些复选框,并给它们一个数字fx:id,表示嵌套的手风琴图中的位置。比如“1_1”或“2_4_1”。 之后,我构建了一个ChangeListener,在选中复选框时调用一个方法。我可以查找复选框的Id,在我的数据中查找它(查看哪个文本属于它,以及是否有任何规则与其他框相冲突),并相

我需要建立一个视图,它有一个4层嵌套的多个手风琴,里面有很多复选框。整个手风琴可能总共有30-40个复选框

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

我的思考过程是:我设置所有这些复选框,并给它们一个数字fx:id,表示嵌套的手风琴图中的位置。比如“1_1”或“2_4_1”。 之后,我构建了一个ChangeListener,在选中复选框时调用一个方法。我可以查找复选框的Id,在我的数据中查找它(查看哪个文本属于它,以及是否有任何规则与其他框相冲突),并相应地处理逻辑,同时将Id及其文本放在地图或列表中以备以后使用,并跟踪复选框

现在我明白了,获取fx:id并不是JavaFX想要我做的事情。我也无法在FXML中的自定义属性中传递自定义id(找不到任何与此相关的内容)。 我现在几乎已经学完了(我刚开始学习JavaFX,掌握了一些基本的Java知识),在我看来,我从错误的角度处理这个话题

我现在的问题是:根据选中的复选框处理几十个复选框并触发代码中的逻辑,而不为每个复选框编写ChangeListener,这将是一个什么样的最佳实践呢


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

您可以找到其他示例,并

感谢您提供的资源。我会调查一下的。我希望我可以使用某种标识符(这是所有fx:id东西背后的原因),因为逻辑是基于我需要查找的数据库中的一些数据。因此,我需要单独识别复选框。您是否认为通过复选框的“文本”执行此操作是一种不好的做法?我可以用复选框的实际文本替换“1_1”等格式的ID,并通过“getText()”进行检查,对吗?将ID作为文本将是一种不好的做法,但只要它起作用并且用户不会生气,为什么不呢?但我不明白你为什么需要它。假设你给了一个复选框
cb1_1
的fx:id,然后你可以通过
@FXML checkbox cb1_1
将它注入到你的控制器中,并使用我向你展示的绑定条件(所以你不需要看到我示例的前两行)。啊!现在我明白你的意思了!事实上,我现在就是这样做的。为了查找复选框的逻辑规则,我在复选框上使用getId(),结果是“cb1_1”,并对照数据库检查它以获得其背后的逻辑。我只是不确定这是否是一种方法,因为我知道使用“getId()”不应该用于此目的。但我不确定,想检查一下我的思维过程。