setOnCloseRequest Java FXML

时间:2017-10-11 17:44:14

标签: java model-view-controller javafx-8

好吧,我正在使用JavaFX FXML,信息少于JavaFX,所以我可以使用MVC,但是我在添加确认对话框时遇到问题,所以如果我按下alt + f4或退出按钮,将显示一个小确认对话框。

我找到this,在setOnCloseOperation上放置一个事件,完成这项工作。

1 个答案:

答案 0 :(得分:0)

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

public class Main extends Application {

@Override
public void start(Stage stage) throws Exception {
    Parent root = FXMLLoader.load(getClass().getResource("close.fxml"));

    Scene scene = new Scene(root);

    stage.setOnCloseRequest(e -> {
        e.consume(); // stop the event to do something before quitting
        closeRequest(stage); // method used to show a confirmation dialog
    });

    stage.setScene(scene);
    stage.show();
}

private void closeRequest(Stage stage){

    String msg =
            "Sure to quit?";
    Alert alerta = new Alert(Alert.AlertType.CONFIRMATION);
    alerta.initStyle(StageStyle.DECORATED);
    alerta.initModality(Modality.APPLICATION_MODAL);
    alerta.initOwner(stage);
    alerta.getDialogPane().setContentText(msg);
    alerta.getDialogPane().setHeaderText(null);
    alerta.showAndWait()
            .filter(response -> response == ButtonType.OK)
            .ifPresent(response -> { stage.close(); }); // then we need to call the close method for a stage, if the response is ok.

}

public static void main(String[] args) {
    launch(args);
}

}

因此,在主类中,加载fxml资源的那个,需要使用setOnCloseOperation方法。

Fisrt您需要使用该事件,以便停止程序完成。 然后我们调用一个方法来显示一个确认框,然后我们可以调用.close方法来关闭舞台。