我想从控制器类处理舞台事件(即隐藏)。所以我要做的就是通过添加一个监听器
((Stage)myPane.getScene().getWindow()).setOn*whatIwant*(...);
但问题是初始化是在之后立即开始的
Parent root = FXMLLoader.load(getClass().getResource("MyGui.fxml"));
和之前
Scene scene = new Scene(root);
stage.setScene(scene);
因此.getScene()返回null。
我自己发现的唯一解决方法是在myPane.sceneProperty()中添加一个侦听器,当它变为非null时,我得到了场景,将其添加到.windowProperty()中,我的天哪!侦听器处理,这是我终于检索到的阶段。最后,设置所需的侦听器来安排事件。
我认为听众太多。
这是解决我的问题的唯一方法吗?
最佳答案
初始化后,可以通过FXMLLoader
从getController()
获取控制器的实例,但是您需要实例化FXMLLoader
而不是使用静态方法。
之后,我直接将load()
调用到控制器后,我将通过该阶段:
FXMLLoader loader = new FXMLLoader(getClass().getResource("MyGui.fxml"));
Parent root = (Parent)loader.load();
MyController controller = (MyController)loader.getController();
controller.setStageAndSetupListeners(stage); // or what you want to do