import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.ButtonType;

public class CloseMonitor extends Application {
    @Override
    public void start(Stage stage) {
        stage.setOnCloseRequest(event -> {
			Alert alert = new Alert(AlertType.CONFIRMATION);
			alert.setTitle("Confirm Close");
			alert.setHeaderText("Close program?");
			alert.showAndWait().filter(r -> r != ButtonType.OK).ifPresent(r->event.consume());
			System.out.println("Close Requested");
		});
        

        Button handleClose = new Button("Handle Close Request");
        handleClose.setOnAction(
                event -> stage.getOnCloseRequest()
                        .handle(
                                new WindowEvent(
                                        stage,
                                        WindowEvent.WINDOW_CLOSE_REQUEST
                                )
                        )
        );
        handleClose.setMaxWidth(Double.MAX_VALUE);

        Button fireClose = new Button("Fire Close Request");
        fireClose.setOnAction(
                event -> stage.fireEvent(
                        new WindowEvent(
                                stage,
                                WindowEvent.WINDOW_CLOSE_REQUEST
                        )
                )
        );
        fireClose.setMaxWidth(Double.MAX_VALUE);

        stage.setScene(
                new Scene(
                        new VBox(
                                10,
                                handleClose,
                                fireClose    
                        )
                )
        );
        stage.show();
        stage.sizeToScene();
    }

    public static void main(String[] args) {
        launch(args);
    }
}