когда я не использую анимацию и у меня есть 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();
}