У меня есть диалоговое окно формы, и я хочу добавить предупреждение о подтверждении до закрытия диалогового окна.
Диалоговое окно не закрывается, пока не будет подтверждено ОК.Это я могу предотвратить, используя событие.
Оно должно подтверждаться только при нажатии на кнопку «ОК», а не «Отмена».Проблема в том, что я не вижу, какая кнопка была нажата на событии.Таким образом, в диалоговом окне отображается подтверждение оповещения для кнопок «ОК» и «ОТМЕНА».
Как отключить функцию onClosingReqeust для отмены?
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.StackPane;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.Window;
public class DialogTestApplication extends Application {
public static void main(String[] args) {
launch(args);
}
class MyDialog extends Dialog<ButtonType> {
public MyDialog(Window window) {
setTitle("MyDialog");
initModality(Modality.WINDOW_MODAL);
initOwner(window);
setResizable(true);
GridPane contentPane = new GridPane();
contentPane.add(new TextField(), 0, 0);
getDialogPane().setContent(contentPane);
getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL);
setOnCloseRequest(event -> {
Alert alert = new Alert(AlertType.CONFIRMATION);
alert.showAndWait().ifPresent(response -> {
if (response == ButtonType.CANCEL) {
event.consume();
}
});
});
}
}
@Override
public void start(Stage primaryStage) throws Exception {
final StackPane root = new StackPane();
final Label rootLabel = new Label("DialogTestApplication");
root.getChildren().add(rootLabel);
final Scene scene = new Scene(root, 400, 150);
primaryStage.setScene(scene);
primaryStage.setTitle("DialogTestApplication");
primaryStage.show();
Platform.setImplicitExit(true);
MyDialog dialog = new MyDialog(primaryStage);
dialog.showAndWait().ifPresent(response -> {
if (response == ButtonType.OK) {
System.out.println("OK");
}
Platform.exit();
});
}
}