Удалить hbox, если не выбран

Я хотел бы создать меню с 3-мя переключателями (comm,med,all). Где, например, кнопка Comm должна создать hbox, но когда выбран другой параметр, этот hbox должен исчезнуть, но это не так.

Может ли кто-нибудь установить меня в правильном направлении? Спасибо большое.

Вот что я получил:

comm.setOnAction(new EventHandler<ActionEvent>() {
                        @Override public void handle(ActionEvent e) {
                            if(comm.isSelected())
                                root.add(commBox, 0,1);
                            else if(med.isSelected()||all.isSelected())
                                root.getChildren().remove(commBox);
                        }
                    });

1 ответ

Решение

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

Зарегистрируйте слушателя в selectedProperty вместо:

comm.selectedProperty().addListener((obs, wasSelected, isNowSelected) -> {
    if (isNowSelected) {
        root.add(commBox, 0,1);
    } else {
        root.getChildren().remove(commBox);
    }
});

В качестве альтернативы вы можете зарегистрировать слушателя в группе переключателей:

// assuming the following existing code, or its equivalent:
ToggleGroup toggleGroup = new ToggleGroup();
comm.setToggleGroup(toggleGroup);
med.setToggleGroup(toggleGroup);
all.setToggleGroup(toggleGroup);

// then this will work:
toggleGroup.selectedToggleProperty().addListener((obs, oldToggle, newToggle) -> {
    if (newToggle == comm) {
        root.add(commBox, 0, 1);
    } else {
        root.getChildren().remove(commBox);
    }
    // maybe more logic here to handle med or all selected...
});
Другие вопросы по тегам