JavaFX类控制器场景参考

有没有办法从关联的类控制器获取FXML加载文件的Scene对象。

我正在做这样的事情:

@FXML private AnchorPane anchor; Scene scene = anchor.getScene(); 

但我想要一个不引用AnchorPane控件的解决方案。

为什么不? 控制器是一个抽象类,除非你故意让他知道,否则他不会知道UI。

节点(包含AnchorPane)是另一个故事,它们几乎不存在于场景图之外。 因此,向Node询问他的父母或场景是完全没问题的。

如果您仍然希望单独处理,则有下一种方法:

  1. 你可以创建一个自定义控制器并在加载后设置场景。 请注意,在调用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); 
  2. 您可以创建一个自定义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"));