Удалить 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...
});