两个如何在JavaFX中绑定两个复选框的选定属性,反之亦然

时间:2016-02-24 15:51:38

标签: java javafx binding

我已经给了两个复选框:radial_sort_linecheckboxDeSelectAll

现在我希望它们以这种方式绑定,如果用户检查其中一个而不是另一个则自动取消选中。

此代码

checkboxSelectAllNotMandatories

不起作用。如果我选择一个,则另一个也被选中。

我可以做出相反的事情吗?

checkboxDeSelectAll.selectedProperty().bindBidirectional(checkboxSelectAllNotMandatories.selectedProperty());

不起作用..:/

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

据我所知,你只能与听众一起做这件事:

checkboxDeSelectAll.selectedProperty().addListener((obs, wasSelected, isNowSelected) -> {
    if (isNowSelected) {
        checkboxSelectAllNotMandatories.setSelected(false);
    }
});

checkboxSelectAllNotMandatories.selectedProperty().addListener((obs, wasSelected, isNowSelected) -> {
    if (isNowSelected) {
        checkboxDeSelectAll.setSelected(false);
    }
});

答案 1 :(得分:0)

就像James_D一样,我也只是听众。而且,如果您想保存一些代码行,则可能需要这样编写:

    Stream.of(fxCb01, fxCb02).forEach(cb -> cb.selectedProperty().addListener((obsVal, oldVal, newVal) -> {
        if (cb.isSelected()) {
            CheckBox otherCb = (cb == fxCb01) ? fxCb02 : fxCb01;
            otherCb.setSelected(false);
        }
    }));

如果您真的想保存一些击键,甚至可以将cb.isSelected()替换为newVal

我不确定,这更具可读性。这只是一个口味问题。