【发布时间】:2017-03-09 00:40:39
【问题描述】:
我想弄清楚如何在打开另一个阶段的同时退出 javafx 中的 primaryStage 单击按钮后,删除初级阶段的代码是什么?
【问题讨论】:
标签: java button javafx exit stage
我想弄清楚如何在打开另一个阶段的同时退出 javafx 中的 primaryStage 单击按钮后,删除初级阶段的代码是什么?
【问题讨论】:
标签: java button javafx exit stage
你可以使用任何一个
primaryStage.close();
或
primaryStage.hide();
根据documentation,这些是完全等价的。可以说,由于hide() 是在超类中定义的,所以它更通用,因此更受欢迎。例如,如果您没有直接引用primaryStage,而是引用其中显示的某个节点,则可以这样做
someNode.getScene().getWindow().hide();
但是以这种方式使用close() 需要强制转换。
一个“陷阱”:默认情况下,当最后显示的窗口关闭时,应用程序将退出。所以如果你这样做了
primaryStage.close();
Stage newStage = new Stage();
Scene newScene = new Scene(...);
newStage.setScene(newScene);
newStage.show();
可能会发生不好的事情,因为您可以在显示新阶段之前隐式退出应用程序(!)。您可以在此处更改默认行为
Platform.setImplicitExit(false);
或者,当然是重新排序代码,以便在关闭现有阶段之前打开新阶段。
【讨论】:
删除阶段的代码是:
stage.close();
与您要退出的阶段相对应的可变阶段
【讨论】:
在你的按钮上设置 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();
动作事件
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();
}
【讨论】: