Скрытие/отображение слоя в javaFX при выборе radio

169
19 марта 2022, 11:00

Всем привет!

Впервые пишу на 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);

Как решить данную проблему?

Answer 1

При инициализации независимо от состояния 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 будет автоматически меняться состояние видимости панели.

READ ALSO
Взаимодействие классов ObjectInputStream, ObjectOutputStream, Runnable с JavaFX

Взаимодействие классов ObjectInputStream, ObjectOutputStream, Runnable с JavaFX

В общем, в потоке JavaFX у меня запускаются два других потока Server и ClientСоответственно нужно как-то в клиент из потока JavaFX передать параметр writeObject,...

179
Retrofit 2 Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $

Retrofit 2 Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $

Собственно, ошибка, как у всех, делаю как в ответах здесь, но работает неправильно

128
Ошибка при запуске теста xlsx создания

Ошибка при запуске теста xlsx создания

Хотя библиотке poi скачал полностью и добавил в проект

74
Получение изображения из AWS S3 для использования на сайте. Java

Получение изображения из AWS S3 для использования на сайте. Java

Я разобрался как загружать файл в bucket aws s3, научился его скачивать в директорию на компьютереНо не могу понять каким способом загружать файлы...

87