打开附加到当前阶段的新FXML - JavaFX

时间:2015-10-05 02:35:20

标签: java javafx

这是SO question的扩展名,其中文件选择器打开并附加到主要阶段。

如何打开一个附属于初级舞台的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();

1 个答案:

答案 0 :(得分:0)

鉴于你之前的问题,我认为通过“附加”你的意思就像文件选择器所做的那样(当有父母时,文件选择器会跟随它)。

您需要的第一件事是“主窗口”,您可以通过

获取
       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()之前。这将删除边框。