我这里有两个控制器authcontroller
和maincontroller
。方法寄存器打开新窗口--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
答案 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);