【问题标题】:Opening a new FXML attached to the current stage - JavaFX打开附加到当前阶段的新 FXML - JavaFX
【发布时间】:2015-10-05 02:35:20
【问题描述】:

这是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();

【问题讨论】:

  • 你的问题不是很清楚。你想创建一个新的舞台吗?
  • 是的,我可以将它附加到初级阶段吗?
  • 我不知道你所说的“附加”是什么意思。您的意思是您希望现有阶段成为它的owner(向下滚动到文档的“所有者”部分)?

标签: java javafx


【解决方案1】:

鉴于您之前的问题,我想您所说的“附加”是指文件选择器所做的事情(当有父级时,文件选择器将跟随它)。

首先需要的是“主窗口”,可以通过

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

【讨论】:

  • 我试过了,但我把舞台作为弹出窗口但没有附加。
  • @akshay 移动原始窗口时会发生什么?两个窗口都应该移动(这是所有权的影响) - 如果它们移动了,那么我不太清楚你所说的“附加”是什么意思。
猜你喜欢
  • 2015-12-31
  • 1970-01-01
  • 1970-01-01
  • 2017-03-09
  • 2016-07-04
  • 1970-01-01
  • 1970-01-01
  • 2015-06-02
  • 1970-01-01
相关资源
最近更新 更多