你可以做
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 ;}
与
public class MenuController extends BorderPane{ // existing pre... public void printA() { System.out.println("A!"); }}
只是一条评论:成为(或任何其他UI类)
MenuController的子类绝对没有任何意义
BorderPane。我把它留在了别处,以防您在其他地方需要它,但是它完全违反了MVC模式。
另外,我不太确定为什么要让关键处理程序
A出现在场景中,而又希望关键处理程序出现在场景
F11的根目录中。似乎这些都应该在场景中注册。但是,我还是把它留在了你的问题中。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)