我这里有两个 Controller authcontroller
和maincontroller
。方法 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/