如果您想将复选框状态读取为4位二进制数,则有16种可能。
如果选择全部4个
CheckBox
考虑到选择的顺序,你得到
4! = 24
可能性。如果允许任意数量的
复选框
是的,如果你选择了3个
复选框
ES和另外12个用于选择2个
复选框
ES和4个以上用于选择1个
复选框
总结到
65 = 24 + 24 + 12 + 4 + 1
是的。
保存选择顺序的最简单解决方案是存储
复选框
在
List
是的。
下面的示例将打印解释为二进制数的选定内容,并打印选定内容的顺序。
@Override
public void start(Stage primaryStage) throws IllegalAccessException {
VBox container = new VBox();
final List selectionOrder = new ArrayList<>();
final int checkBoxCount = 4;
for (int i = 0; i < checkBoxCount; i++) {
final CheckBox cb = new CheckBox();
cb.setUserData(i);
cb.selectedProperty().addListener((o, oldValue, newValue) -> {
if (newValue) {
selectionOrder.add(cb);
} else {
selectionOrder.remove(cb);
}
});
container.getChildren().add(cb);
}
Button btn = new Button("print");
btn.setOnAction(evt -> {
System.out.println(selectionOrder.stream().map(c -> c.getUserData().toString()).collect(Collectors.joining(", ", "{ ", " }")));
// print binary
int value = 0;
for (CheckBox cb : selectionOrder) {
value |= (1 << ((Integer) cb.getUserData()));
}
System.out.println(value);
});
container.getChildren().add(btn);
Scene scene = new Scene(container);
primaryStage.setScene(scene);
primaryStage.show();
}
如果您实际上不需要选择的顺序,我建议删除列表
selected
属性,而不是设置
userData
而是存储
复选框
A中的ES
CheckBox[] array
这样你就可以
int value = 0;
for (int i = 0; i < array.length; i++) {
if (array[i].isSelected()) {
value |= (1 << i);
}
}