2017-01-13 16 views
0

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

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

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

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); 
         } 
        }); 
+0

Вы хотите, чтобы скрыть его, чтобы быть в состоянии отображать это в другой раз или просто удалить его полностью? Если это второй вариант, зачем вы хотите это сделать? –

ответ

2

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... 
});