java - 如果未选中复选框,JavaFX 将删除执行的操作
问题描述
我是一个使用 JavaFX 的初学者。在我的程序中,当一个复选框被选中时,我希望它显示一个标签和一个选择框。但是,当它未被选中时,我希望这两个都消失。但是,我不太确定如何执行此操作。
这是我的代码:
String [] options = new String [] {"A", "B", "C", "D", "E", "F"};
CheckBox [] cbs = new CheckBox[options.length];
for (int i = 0; i < options.length; i++){
final CheckBox cb = cbs[i] = new CheckBox(options[i]);
cb.selectedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
if(observable.getValue() == true){
ChoiceBox<Integer> choice = new ChoiceBox<>();
Label label = new Label("How many of the selected accounts do you have?");
choice.getItems().addAll(1, 2, 3, 4, 5);
choice.setValue(1);
selection.setAlignment(Pos.BOTTOM_LEFT);
selection.getChildren().addAll(label, choice);
gp.add(selection, 0, 8);
} else if (observable.getValue() == false){
// remove above block if getValue() == false;
}
}
});
}
解决方案
您需要保留对节点的引用。您可以通过向匿名添加字段ChangeListener
或向循环主体添加(有效的)最终局部变量来做到这一点。
我不确定是什么selection
,但对多个复选框使用同一个节点似乎是个坏主意。
以下示例只是添加/删除VBox
包含Label
and的 a ChoiceBox
。由于这会改变布局,我建议改为禁用节点或更改可见性而不是添加/删除节点。
@Override
public void start(Stage primaryStage) throws Exception {
String[] options = new String[]{"A", "B", "C", "D", "E", "F"};
GridPane grid = new GridPane();
for (int i = 0; i < options.length; i++) {
final int row = i;
String option = options[i];
CheckBox checkBox = new CheckBox(option);
ChoiceBox<Integer> choice = new ChoiceBox<>();
Label label = new Label("How many of the selected accounts do you have?");
choice.getItems().addAll(1, 2, 3, 4, 5);
VBox choiceContainer = new VBox(label, choice);
checkBox.selectedProperty().addListener((o, oldValue, newValue) -> {
if (newValue) {
grid.add(choiceContainer, 1, row);
} else {
grid.getChildren().remove(choiceContainer);
}
});
grid.add(checkBox, 0, row);
}
Scene scene = new Scene(grid);
primaryStage.setScene(scene);
primaryStage.show();
}
推荐阅读
- c# - 清空数据库后出现新的Item ID
- javascript - 如何停止脚本在 .then 阶段执行?
- monaco-editor - 如何在摩纳哥编辑器中以编程方式查找文本的位置
- python - Python 3 PIL:将 3 元组的 Numpy 数组转换为 HSV 中的图像
- cygwin - Cygwin 安装:graphviz 和/或 libcgraph 缺少文件?
- console - 无法在谷歌云控制台上创建新项目 - “您必须选择父组织或文件夹”
- android - “adb shell dumpsys 活动”中的“堆栈”是什么意思?
- java - 工厂模式:支持新的具体类型
- java - JNA 传递结构,包含指向结构的指针和指向基元的指针
- c# - C# 异步任务 - 单元测试