Код в javafx.scene.control.Dialog.close()
находит первую кнопку, которая возвращает true для isCancelButton (). Это поведение подробно описано в разделе " Правила закрытия диалога " в официальном Javado c для javafx.scene.control.Dialog.
for (ButtonType button : getDialogPane().getButtonTypes()) {
ButtonData buttonData = button.getButtonData();
if (buttonData == null) continue;
if (buttonData == ButtonData.CANCEL_CLOSE) {
cancelButton = button;
break;
}
if (buttonData.isCancelButton()) {
cancelButton = button;
}
}
Следовательно лучшее, что я могу предложить, это использовать тип «ДРУГОЙ» вместо типа ButtonData.NO. Это предотвратит закрытие диалога, поэтому пользователь вынужден выбрать ДА или НЕТ
ButtonType okBttn = new ButtonType("yes", ButtonData.YES);
ButtonType noBttn = new ButtonType("no", ButtonData.OTHER);
В качестве альтернативы вы можете добавить явный параметр закрытия, который будет выбран, если диалоговое окно закрыто вручную.
ButtonType okBttn = new ButtonType("yes", ButtonData.YES);
ButtonType noBttn = new ButtonType("no", ButtonData.OTHER);
ButtonType closeButton = new ButtonType("Close", ButtonData.CANCEL_CLOSE);