Как загружать и удалять динамически узлы в javafx? - PullRequest
0 голосов
/ 18 января 2019

Мне нужно динамически загрузить список кнопок и добавить список действий ко всем из них, основываясь на решении пользователя. Далее я должен удалить эти кнопки и загрузить вместо них другие кнопки. Я пытался использовать этот код,

public void clearRadioButtons()
{


    for(int i =0; i< radioButtons.size() -1;i++)
    {
        radioButtons.remove(i);
        group.getToggles().remove(i);
        vBox.getChildren().remove(radioButtons);

    }
    radioButtons.clear();
    group.getToggles().clear();
    System.out.println("Clear"+radioButtons.size());


}

но эти радиокнопки все еще на моем экране. Я не могу их удалить. Кто-нибудь знает, как динамически загружать, удалять и загружать что-то вместо них?

1 Ответ

0 голосов
/ 19 января 2019
Метод

List remove(Object) удаляет элемент, только если объект, переданный в качестве параметра, является частью списка. Передача списка не приводит к изменению списка.

Также цикл реализован неправильно (если вы не хотите удалить последний RadioButton и пропустить все остальные переключатели).

Используйте вместо этого removeAll(Collection), чтобы удалить переключатели. Использование clear также может быть вариантом, если нет других потомков VBox.

Пример:

private final List<RadioButton> radioButtons = new ArrayList<>();
private final ToggleGroup toggleGroup = new ToggleGroup();
private VBox vBox;

private void clearRadios() {
    vBox.getChildren().removeAll(radioButtons); // remove from scene
    radioButtons.clear(); // remove from list
    toggleGroup.getToggles().clear(); // remove from ToggleGroup
}

private void addRadios(int count) {
    for (int i = 0; i < count; i++) {
        RadioButton radio = new RadioButton();
        radio.setToggleGroup(toggleGroup);
        radioButtons.add(radio);
        vBox.getChildren().add(radio);
    }
}

@Override
public void start(Stage stage) throws Exception {
    Button btn = new Button("add");
    btn.setOnAction(evt -> addRadios(5));

    Button btn2 = new Button("clear");
    btn2.setOnAction(evt -> clearRadios());

    vBox = new VBox(btn, btn2);

    stage.setScene(new Scene(vBox, 300, 500));
    stage.show();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...