Сохранение сцены перед переходом на следующую

Рейтинг: 0Ответов: 1Опубликовано: 07.11.2014

Проблема состоит в том, что не сохраняется состояние задизейбленных (disabled) кнопок.

Предположим, что у нас есть две сцены: А и Б. На сцене А есть грид, состоящий из кнопок. После нажатия на кнопку в соотв. обработчике она дизейблится, текущая сцена переустанавливается в Application.setScene() и загружается сцена Б. На сцене Б я вызываю контроллер сцены А и изменяю содержимое Label-а.
ОК, это работает, но на загруженной сцене уже отсутствует состояние disabled кнопки! (сама кнопка присутствует : )). И я не понимаю, почему, ведь сцену-то я сохранил. Я уже не понимаю, куда смотреть, т.к. в офф. доках такие вопросы вообще не рассмотрены (как банально создать и забить программно/файлово сцену, я догоняю, но не более).

Код обработчика я уже выкладывал:

public void mouseClickedOnButtonHandler() {
    for (final Button button_for_handle : getButtons()) {
        button_for_handle.setOnMouseClicked(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                Player.getPlayer(0).setScore(button_for_handle.getText());
                button_for_handle.setDisable(true);
                GameApp.currentStage.setScene(button_for_handle.getScene());
                loadScene("/view/file.fxml");
            }
        });
    }
}

Ответы

▲ 1

Надеюсь, правильно понял Ваш вопрос. У каждого контроллера сцены есть метод initialize, который запускается до того, как сцена "отрисуется".

@FXML
Button myDisabledButton;

@Override
public void initialize(URL url, ResourceBundle rb) {
 //Почему бы Вам не поставить setDisable для кнопок здесь?
 myDisabledButton.setDisable(true);
}

После этих несложных манипуляций Ваши кнопку будут автоматически Disabled при загрузке данной сцены.

P.S.: Не забудьте внутри FXML файла для своих кнопок прописать их fx:id, чтобы обращаться к ним из контроллера:

<Button id="myCSSID" fx:id="myDisabledButton">