两个如何在 JavaFX 中绑定两个复选框的选定 属性 反之亦然
How two bind the selected property of two checkboxes vice versa in JavaFX
我给出了两个复选框:checkboxDeSelectAll
和 checkboxSelectAllNotMandatories
现在我希望它们以这种方式绑定,如果用户选中其中一个,则另一个会自动取消选中。
这个代码
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
。
我不确定,哪个更易读。这只是一个品味问题。
我给出了两个复选框:checkboxDeSelectAll
和 checkboxSelectAllNotMandatories
现在我希望它们以这种方式绑定,如果用户选中其中一个,则另一个会自动取消选中。
这个代码
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
。
我不确定,哪个更易读。这只是一个品味问题。