showAndWait () с анимацией, использование Platform.runlater () дает другое поведение - PullRequest
0 голосов
/ 17 июня 2020

когда я не использую анимацию и у меня есть stage.showAndWait (), он ведет себя правильно (я получаю истину из метода, когда нажата кнопка yes) Но я хочу использовать анимацию, поэтому я использую обходной путь с

Platform.runLater(()-> {
            stage.setScene(new Scene(root));
            stage.initModality(Modality.APPLICATION_MODAL);
            stage.showAndWait();
                }

но на этот раз даже до нажатия любой кнопки значение ложно, и я не получаю никакого значения от кнопки.

Итак, это мой метод отображения диалогового окна подтверждения. Я хочу перезапустить игру, если нажата кнопка «Да», и выйти из программы, если нет.

public boolean display(String title, String message) throws IOException {

        FXMLLoader confirmViewLoader = new FXMLLoader(getClass().getResource("../main/ConfirmDialogBoxView.fxml"));
        confirmViewLoader.load();
        ConfirmDialogBoxController confirmDialogBoxController = confirmViewLoader.getController();
        confirmDialogBoxController.setConfirmLabelText(message);
        Parent root = confirmViewLoader.getRoot();
        Stage stage = new Stage();
        stage.setTitle(title);

        Platform.runLater(()-> {
            stage.setScene(new Scene(root));
            stage.initModality(Modality.APPLICATION_MODAL);
            stage.showAndWait();
                }
        );
        return confirmDialogBoxController.getBtnChoice();
    }

и здесь часть, где проверяется, завершена ли игра

...

TranslateTransition animation = new TranslateTransition(Duration.seconds(0.25), disc);  ///// Animation
        animation.setToY(row * (TILE_SIZE + 5) + TILE_SIZE / 4);

        if (checkConnections(column, currentRow)) {         
            gameOver();
        }else{
            playerRed = !playerRed;
        }

        animation.play();
    }

в моем контроллере подтверждения :

public boolean getBtnChoice(){
        return answer;
    }
@FXML
    public void yesButtonClicked(ActionEvent actionEvent) {

        answer = true;
        stage = (Stage) yesButton.getScene().getWindow();
        stage.close();

    }

    @FXML
    public void noButtonClicked(ActionEvent actionEvent) {

        answer = false;
        Stage confirmWindow = (Stage) noButton.getScene().getWindow();
        confirmWindow.close();
        Platform.exit();
    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...