首页 文章

JavaFX如何在start()之外的函数中访问primaryStage

提问于
浏览
2

我已经在我的类中使用了start方法来启动javaFX的primaryStage .

但是我有另一个名为change_screen(int n)的函数,它将根据传递给它的数字创建一个新场景并为该新场景执行primaryStage.setScene()和.show() .

唯一的问题是在start函数中声明了primaryStage,因此我无法在change_screen()函数中访问它 .

我该如何解决这个问题?我已经阅读了整本java教科书,所以我对大多数概念都有所了解,但它并没有深入研究javaFx,所以我不知道如何处理多个场景 .

我有一个游戏,屏幕会根据他们正在查看的菜单而有所不同,那么更容易改变场景的最佳方法是什么?我想尽可能使用primaryStage,因为它已经实例化了,如果我相信我理解javaFX,如果创建了一个知道的阶段,这是一个新的窗口是正确的吗?

如果我的方法是错误的,那么在同一窗口中更改几个场景的正确方法是什么?

2 回答

  • 0

    你不能在外部声明一个变量并将start方法中创建的阶段分配给它吗?

    public class YourClass extends Application
    {
        private Stage stage;
    
        @Override
        public void start(Stage primaryStage)
        {
            this.stage = primaryStage;
        }
    
        public void change_screen(int n)
        {
            stage.setScene(otherScene)
        }
    }
    
  • 2

    而不是声明你的Pane / StackPane / BorderPane /等 . 在start方法内部,在Main Class中进行 .

    private static Pane somePane = new Pane();
    
    public static void setSomePane(Pane p) {
        somePane = p;
    }
    
    public static Pane getSomePane() {
        return somePane;
    }
    

    然后,如果你试图控制另一个类的“初级阶段”中显示的内容,你可以随时设置它......

    Main.setSomePane(new Pane());
    

    实际上,您可以控制主窗口,因为您可以控制它显示的窗格 .

    从那时起,如果你想真正访问主要阶段,你可以像James_D所说的那样,并调用主窗口,如下所示......

    Main.getRoot().getScene().getWindow();
    

    希望有所帮助

相关问题