[英]Opening a new FXML attached to the current stage - JavaFX
这是SO 问题的扩展,其中文件选择器打开并附加到初级阶段。
如何打开附加到初级阶段的FXML
阶段?
下面的代码加载FXML
并替换 primaryStage(当前阶段)。 如何将其加载为附加窗口?
Stage stage = (Stage)((Node) event.getTarget()).getScene().getWindow();
Parent parent = null;
try {
parent = FXMLLoader.load(getClass().getResource("/gui/GUpdater-progress.fxml"));
} catch (IOException e) {
e.printStackTrace();
}
Scene scene = new Scene(parent,600,400);
stage.setResizable(false);
stage.setTitle("GUpdater");
stage.setScene(scene);
stage.show();
鉴于您之前的问题,我想通过“附加”您的意思是类似于文件选择器所做的事情(当有父项时,文件选择器将跟随它)。
您需要的第一件事是“主窗口”,您可以通过
Window ownerWindow = ((Node) event.getTarget()).getScene().getWindow();
接下来是实际加载您的新阶段。
Stage stage = new Stage();
stage.initModality(Modality.APPLICATION_MODAL);
stage.initOwner(ownerWindow);
Parent root = FXMLLoader.load(getClass().getResource("/gui/GUpdater-progress.fxml"));
Scene scene = new Scene(root, 600, 400);
stage.setTitle("GUpdater");
stage.setScene(scene);
stage.show();
关键是stage.initOwner(ownerWindow)
部分。 您正在创建的这个新阶段由原始窗口“拥有”,即ownerWindow
。
另外,如果你想获得更像文件选择器的感觉,你应该使用
stage.initStyle(StageStyle.UNDECORATED);
在setScene()
之前。 这将删除边框。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.