JavaFX类控制器场景参考
有没有办法从关联的类控制器获取FXML加载文件的Scene对象。
我正在做这样的事情:
@FXML private AnchorPane anchor; Scene scene = anchor.getScene();
但我想要一个不引用AnchorPane控件的解决方案。
为什么不? 控制器是一个抽象类,除非你故意让他知道,否则他不会知道UI。
节点(包含AnchorPane)是另一个故事,它们几乎不存在于场景图之外。 因此,向Node询问他的父母或场景是完全没问题的。
如果您仍然希望单独处理,则有下一种方法:
-
你可以创建一个自定义控制器并在加载后设置场景。 请注意,在调用
initialize()
它还没有初始化。public class MyController { private void Scene scene; public void setScene(Scene scene) { this.scene = scene; } } // loading code FXMLLoader fxmlLoader = new FXMLLoader(); AnchorPane root = (AnchorPane) fxmlLoader.load(getClass().getResource("MyApp.fxml")); MyController myController = (MyController) fxmlLoader.getController(); myController.setScene(scene);
-
您可以创建一个自定义fxml控件,它将包含控制器,他可以为自己调用
getScene()
。 请参阅此处的示例: https : //stackoverflow.com/a/10718683/1054140
我尝试了你的答案,但它没有用,我在这里找到了原因:
JavaFX:如何在初始化期间从控制器获取阶段?
评论后:
// loading code
不要使用静态加载方法
AnchorPane root=(AnchorPane) FXMLLoader.load(getClass().getResource("MyApp.fxml"));
而是使用实例化的加载器方法
AnchorPane root=(AnchorPane) fxmlLoaded.load(getClass().getResource("MyApp.fxml"));