【发布时间】:2016-11-17 12:56:08
【问题描述】:
我这里有两个控制器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 是第二个窗口的选项卡。但是当我尝试这样做时,我的Stage 始终为空。但是,如果我尝试在另一个句柄方法中获取Stage,我可以做到。当我的第二个窗口加载后如何获取第一个窗口的Stage?
第二个控制器实现接口Initializable
【问题讨论】:
-
这样做是个坏主意。如果您在初始化方法中获得
Window,则依赖于将tabOnePane添加到场景中并将该场景添加到窗口中。这使得代码难以维护。您可能应该找到一种方法来从控制器类之外对stage执行任何操作。在您完成加载 fxml 之前,您是如何设法将tabOnePane添加到场景中的? -
我使用 fx:id 从 fxml 文件添加了 tabOnePane。不幸的是,我需要在那个课程中使用这个阶段,因为它给了我稍后在第二堂课中使用的属性。
标签: java javafx initialization scene stage