有没有办法从相关的类控制器中获取FXML加载文件的场景对象?
我的做法如下:
我的做法如下:
@FXML
private AnchorPane anchor;
Scene scene = anchor.getScene();
但我希望有一种不涉及AnchorPane控件的解决方案。
为什么不行?Controller是一个抽象类,除非你故意让他知道,否则他不会意识到UI。
节点(包括AnchorPane)则是另一回事,它们在场景图之外几乎不存在。因此,询问节点的父级或场景是完全可以的。
如果您仍想单独处理这个问题,则有以下方法:
您可以创建一个自定义控制器,并在加载程序后设置场景。只需注意,在调用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://dev59.com/sWkw5IYBdhLWcg3wrsnn#10718683
// loading code
AnchorPane root=(AnchorPane) FXMLLoader.load(getClass().getResource("MyApp.fxml"));
而是使用实例化的加载器方法
AnchorPane root=(AnchorPane) fxmlLoaded.load(getClass().getResource("MyApp.fxml"));