Всем привет!
Впервые пишу на JavaFX, еще многие вещи не изучил, на данный момент возникла такая проблема:
Имеется fxml документ данного вида:
Необходимо, чтобы при выборе radio клавиши "NO", данные поля скрывались, при "YES" соответственно отображались. В fxml документе они положены на AnchorPane. То есть пытался скрывать просто его. Но работало не точно.
<AnchorPane fx:id="additionalPane" layoutX="139.0" layoutY="346.0" prefHeight="137.0" prefWidth="639.0">
<children>
<TextField fx:id="needsSpecialtyField" layoutX="149.0" layoutY="14.0" prefHeight="31.0" prefWidth="341.0" promptText="Necessary specialty" />
<TextField fx:id="educationField" layoutX="149.0" layoutY="55.0" prefHeight="31.0" prefWidth="341.0" promptText="Education" />
<TextField fx:id="expirienceField" layoutX="149.0" layoutY="96.0" prefHeight="31.0" prefWidth="341.0" promptText="Expirience" />
</children>
</AnchorPane>
Пробовал в классе-контроллере в методе инициализации указать параметр setVisible(false/true), по типу:
if (yesRadioButton.isSelected()) {
yesRadioButton.setOnAction(event -> {
additionalPane.setVisible(true);
});
}
if (noRadioButton.isSelected()) {
noRadioButton.setOnAction(event -> {
additionalPane.setVisible(false);
});
}
Но в данном случае, при старте программы по умолчанию стоит выбор "NO", но панель открыта, при переключение на "YES" и обратно на "NO" панель скрывается, но дальнейшие нажатия на "YES" не отображают панель.
Radio клавиши объеденины в ToggleGroup:
ToggleGroup group = new ToggleGroup();
yesRadioButton.setToggleGroup(group);
noRadioButton.setSelected(true);
noRadioButton.setToggleGroup(group);
Как решить данную проблему?
При инициализации независимо от состояния radiobutton нужно привязаться к событиям изменения их состояния. Поэтому оба setOnAction нужно вынести из условий, и отдельно установить начальное состояние видимости панели:
yesRadioButton.setOnAction(event -> {
additionalPane.setVisible(true);
});
noRadioButton.setOnAction(event -> {
additionalPane.setVisible(false);
});
additionalPane.setVisible(yesRadioButton.isSelected());
А вообще можно то же самое сделать одной строкой:
additionalPane.visibleProperty().bind(yesRadioButton.selectedProperty());
Т.е. свойство видимости панели связать со свойством состояния yesRadioButton, тогда при изменении состояния yesRadioButton будет автоматически меняться состояние видимости панели.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости