如何在javafx中打开一个新阶段时退出primaryStage

时间:2016-10-26 15:04:19

标签: java button javafx exit stage

我想弄清楚如何在打开另一个阶段时退出javafx中的primaryStage 单击按钮后,删除主要阶段的代码是什么?

3 个答案:

答案 0 :(得分:1)

您可以使用

/dev

primaryStage.close();

根据documentation,这些完全相同。可以认为,由于primaryStage.hide(); 是在超类中定义的,因此它更为通用,因此略有优选。例如,如果您没有直接引用hide(),而是显示在其中的某个节点,则可以执行

primaryStage

但是使用someNode.getScene().getWindow().hide(); 这种方式需要强制转换。

一个"陷阱":默认情况下,当显示的最后一个窗口关闭时,应用程序将退出。所以,如果你这样做

close()

可能会发生不好的事情,因为您可能会在显示新阶段之前隐式退出应用程序(!)。您可以使用

更改此处的默认行为
primaryStage.close();
Stage newStage = new Stage();
Scene newScene = new Scene(...);
newStage.setScene(newScene);
newStage.show();

或者,当然要重新排序代码,以便在关闭现有代码之前打开新阶段。

答案 1 :(得分:0)

删除舞台的代码是:

stage.close();

对应于您要退出的舞台的变量阶段

答案 2 :(得分:0)

在按钮上设置fx:id

<JFXButton fx:id="btn_login" prefHeight="41.0" prefWidth="242.0" style="-fx-background-color: #0098DA;" text="Login" textFill="WHITE" GridPane.columnIndex="1" GridPane.rowIndex="4">
你的java控制器中的

Stage stage = (Stage) btn_login.getScene().getWindow();

的ActionEvent

private void act_login(ActionEvent event) { //login pressed
    stage.close();
    Stage primaryStage = new Stage();
    Parent root = null;
    try {
        root = FXMLLoader.load(getClass().getResource("../fxmlFile/main.fxml"));
    } catch (IOException e) {
        e.printStackTrace();
    }
    primaryStage.setTitle("Main Aplikasi Keuangan");
    primaryStage.setScene(new Scene(root, 600, 400));
    primaryStage.show();
}