Javafx阶段为空

时间:2016-11-17 12:56:08

标签: java javafx initialization scene stage

我这里有两个控制器authcontrollermaincontroller。方法寄存器打开新窗口--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();
            }
        });

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

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

}

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

第二个控制器实现接口Initializable

1 个答案:

答案 0 :(得分:0)

首先,您永远无法访问Controller中的initialize方法中的stage。 第二步只需向控制器添加一个方法,如setStage(Stage stge),然后像这样加载fxml,将阶段传递给控制器​​:

    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);