Javafx 阶段为空

标签 java javafx initialization scene stage

我这里有两个 Controller authcontrollermaincontroller。方法 register 打开新窗口 - register.fxml。

register.setOnAction(new EventHandler<ActionEvent>() {
            public void handle(ActionEvent event) {
                Stage stage = new Stage();
                AnchorPane pane = null;
                try {
                    pane = FXMLLoader.load(getClass().getResource("/fxml/register.fxml"));
                } catch (IOException e) {
                    e.printStackTrace();
                }

                stage.setTitle("Регистрация в системе");
                Scene scene = new Scene(pane, 600, 450);
                stage.setResizable(false);
                stage.setScene(scene);
                stage.show();
            }
        });

然后在第二个 Controller 中我有方法初始化,我尝试从第一个窗口获取Stage

@Override
    public void initialize(URL location, ResourceBundle resources)  {
    Stage stage = (Stage) tabOnePane.getScene().getWindow();

}

tabOnePane 是第二个窗口中的选项卡。但是当我尝试这样做时,我的 Stage 始终为 null。但如果我尝试将 Stage 放入另一个句柄方法中,我就可以做到。当我的第二个窗口加载时,如何获取第一个窗口的 Stage

第二个 Controller 实现接口(interface)Initialized

最佳答案

首先,您永远无法访问 Controller 中初始化方法中的阶段。 其次,只需向 Controller 添加一个方法,例如 setStage(Stage stge),然后像这样加载 fxml 以将阶段传递给 Controller ​​:

    FXMLLoader loader = new FXMLLoader();
    loader.setLocation(getClass().getResource("/root/mainGui.fxml"));
    Parent root = loader.load();
    Scene scene = new Scene(root, 500, 400);
    controllerInterface ctrl = loader.getController();
    ctrl.setStage(primaryStage);

关于Javafx 阶段为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40655518/

相关文章:

java - Akka批量处理/单项处理

c++ - 初始化文件良好实践

java - 具有复杂通用类层次结构的 ClassCastException 和 NoSuchMethodException

java - 自动调用 iterator() 方法

java - JavaFX 中两个 fxml 文件和 Controller 的问题

javafx - 如何在窗口最大化时自动调整 JavaFX 容器的大小?

C++:没有匹配的初始化/候选构造函数不可行的构造函数:需要单个参数,但没有提供任何参数

android - 初始初始化组织

java - JDBC CallableStatement 和 Oracle SYS_REFCURSOR IN 参数?

java - 如何在 JavaFX 中将 ObjectProperty<String> 转换为 StringProperty?