I built a small application in JavaFX yesterday. I wanted to get the Scene of the application in the Controller class. I got an error every time I tried to get the scene in
You can do
private Node replaceSceneContent(String fxml) throws Exception {
FXMLLoader loader = new FXMLLoader();
loader.setBuilderFactory(new JavaFXBuilderFactory());
loader.setLocation(Main.class.getResource(fxml));
BorderPane page = loader.load();
MenuController controller = loader.getController();
page.setOnKeyPressed(event -> {
switch (event.getCode()) {
case F11:
if (stage.isFullScreen()) {
stage.setFullScreen(false);
} else {
stage.setFullScreen(true);
}
break;
default:
break;
}
});
Scene scene = new Scene(page);
scene.setOnKeyPressed(event -> {
if (event.getCode() == KeyCode.A) {
controller.printA();
}
});
page.prefWidthProperty().bind(scene.widthProperty());
page.prefHeightProperty().bind(scene.heightProperty());
stage.setScene(scene);
return controller ;
}
with
public class MenuController extends BorderPane{
// existing code...
public void printA() {
System.out.println("A!");
}
}
Just a comment: it makes absolutely no sense for MenuController
to be a subclass of BorderPane
(or any other UI class). I left that in, in case you need it elsewhere, but it completely violates the MVC pattern.
Additionally, I'm not really sure why you want the key handler for A
to be on the scene, and the key handler for F11 to be on the root of the scene. It seems these should both be registered with the scene. But again, I left it as you had it in the question.