Метод Window.show()
показывает окно и сразу возвращает . Поэтому ваш код
public static boolean display(String titolo,String messaggio){
// ...
window.show();
return flag;
}
отобразит окно и немедленно вернет текущее значение flag
(которое изначально равно false
).
Если пользователь нажимает yButton
, флаг , затем установлен на true
, и в следующий раз, когда они попытаются закрыть главное окно, метод немедленно вернет true
, и главное окно закроется.
Вместо этого вы можете используйте метод window.showAndWait()
, который «Показывает этот этап и ждет, пока он не будет скрыт (закрыт), прежде чем вернуться к вызывающему.»:
public static boolean display(String titolo,String messaggio){
// ...
// window.show();
window.showAndWait();
return flag;
}
Как указывали другие ответы , есть также Dialog
API , включая удобный Alert
класс . Основная функциональность, которую Dialog
предоставляет, а не Stage
- это возможность возвращать значение из метода showAndWait()
. В вашем случае вы хотите вернуть boolean
, поэтому версия вашего метода на основе Dialog
будет выглядеть так:
public static boolean display(String titolo,String messaggio){
Dialog<Boolean> dialog = new Dialog<>();
dialog.setTitle(titolo);
dialog.getDialogPane().setContentText(messaggio);
dialog.getDialogPane().getButtonTypes().addAll(
ButtonType.YES, ButtonType.NO);
// Result of dialog is true if button is YES button,
// false otherwise
dialog.setResultConverter(button -> button == ButtonType.YES);
// return result of dialog, or false if there is no result
// (i.e. if user closes dialog without pressing a button)
return dialog.showAndWait().orElse(false);
}