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

时间:2016-01-01 04:09:39

标签: inheritance javafx

我的类中使用了start方法来启动javaFX的primaryStage。

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

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

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

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

如果我的方法有误,那么在同一个窗口中通过多个场景进行更改的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

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

override func viewDidLoad() {
super.viewDidLoad()

let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissKeyboard")
view.addGestureRecognizer(tap)
}

func dismissKeyboard() {

    view.endEditing(true)
}

答案 1 :(得分:0)

而不是声明你的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();

希望有所帮助