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

How two bind the selected property of two checkboxes vice versa in JavaFX

我给出了两个复选框:checkboxDeSelectAllcheckboxSelectAllNotMandatories

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

这个代码

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

不起作用。如果我 select 一个,另一个也是 selected。

我可以做相反的东西吗?

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

不起作用.. :/

感谢您的帮助!

据我所知,您只能对听众执行此操作:

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

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

喜欢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

我不确定,哪个更易读。这只是一个品味问题。