ventana - Referencia de escena del controlador de clase JavaFX
nueva ventana en javafx (2)
¿Hay alguna forma de obtener el objeto Scene de un archivo cargado de FXML desde el controlador de clase asociado?
Estoy haciendo algo como esto:
@FXML
private AnchorPane anchor;
Scene scene = anchor.getScene();
pero me gustaría una solución que no haga referencia al control de AnchorPane.
Intenté tu respuesta, pero no funcionó, encontré el motivo aquí:
JavaFX: ¿cómo obtener la etapa del controlador durante la inicialización?
después del comentario:
// loading code
no use el método de carga estática
AnchorPane root=(AnchorPane) FXMLLoader.load(getClass().getResource("MyApp.fxml"));
pero en su lugar use el método del cargador ejemplificado
AnchorPane root=(AnchorPane) fxmlLoaded.load(getClass().getResource("MyApp.fxml"));
Por qué no? El controlador es una clase abstracta, no conoce la IU a menos que usted lo haga saber deliberadamente.
Los nodos (que incluyen AnchorPane) son otra historia, apenas existen afuera para scenegraph. Así que está perfectamente bien preguntarle a Node sobre su padre o escena.
Si todavía desea manejar eso por separado, hay próximos enfoques:
puede crear un controlador personalizado y establecer una escena después del cargador. Solo tenga en cuenta que en el momento en que
initialize()
llamó, aún no se habría inicializado.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);
Puede crear un control fxml personalizado que incorporará el controlador y él puede simplemente llamar a
getScene()
por sí mismo. Vea un ejemplo aquí: https://.com/a/10718683/1054140