Вам необходимо сохранить ссылку на узлы. Вы можете сделать это, добавив поля к анониму ChangeListener
или добавив (эффективно) конечную локальную переменную в тело цикла.
Я не уверен, что такое selection
, но использование одного и того же узла для нескольких флажков кажется плохой идеей.
В следующем примере просто добавляется / удаляется VBox
, содержащий Label
и 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();
}