在JavaFX中处理大量复选框的好习惯是什么

时间:2014-10-08 14:12:21

标签: java user-interface javafx

我需要构建一个View,它有一个4层嵌套的Multi-Accordion,里面有很多复选框。所有这些都可以通过“手风琴”获得大约30-40个复选框。

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

我的思维过程是:我把所有这些复选框都给了它们,并给它们一个数字fx:id来表示嵌套的折叠图中的位置。喜欢" 1_1"或" 2_4_1"。 之后,我构建一个ChangeListener,调用一个选择复选框的方法。我可以查看复选框的Id,在我的数据中查找(查看哪个Text属于它以及是否有任何规则干扰其他框)并相应地处理逻辑,同时将id及其文本放在Map中或列出以便以后保存并跟踪复选框。

现在我开始知道,获取fx:id不是JavaFX要我做的事情。我无法在FXML中的自定义属性中提供自定义ID(无法找到任何相关内容)。 我现在几乎完全掌握了知识(我刚开始使用JavaFX并拥有一些基本的Java知识),在我看来,我从错误的一面处理这个主题。

我现在的问题是:根据检查的方框处理几十个复选框和触发逻辑的最佳做法是什么,而不是为每个单独的复选框写一个ChangeListener给我留下一些(imo)丑陋的代码一路走来。

编辑:我忘了提到:我确实通过编写一个自定义CheckboxChangeListener来实现某种功能性解决方案,其中引用了addListener方法并使用" getId()"在这个参考。我开始知道,这个方法引用了fxml元素的css:id而不是它的fx:id,我不太确定这是否是一个正确的方法

1 个答案:

答案 0 :(得分:0)

您应该使用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 您可以找到其他示例herehere an oracle tutorial