如何在JavaFX应用程序中获取主阶段?

是否可以在正在运行的JavaFX应用程序中获取对主Stage的引用?

这个问题的上下文是我想编写一个从另一种语言(Prolog)操作JavaFX接口的库。 为此,我的库需要访问主舞台。 目标是JavaFX应用程序的程序员不必在start方法中显式存储对Stage对象的引用,因此对于用户界面设计者应该是透明的(如果需要更多细节,这是一个相关的问题 ) 。

这个问题的一部分是获取对原始JavaFX应用程序的主要Stage对象的引用,所以我想知道某个地方的静态方法是否可以让我访问它。

不确定正确的决定,但它适用于我的情况。

使用getter和setter在主类中创建静态字段:

public class MyApp extends Application { private static Stage pStage; @Override public void start(Stage primaryStage) { setPrimaryStage(primaryStage); pStage = primaryStage; ... } public static Stage getPrimaryStage() { return pStage; } private void setPrimaryStage(Stage pStage) { MyApp.pStage = pStage; } } 

接下来,在必要的地方调用getter。 例如:

 stageSecond.initOwner(MyApp.getPrimaryStage()); 

我只是在研究这个问题。 似乎没有任何内置方法来获得初级阶段。 您可以从主窗口中的节点使用node.getScene()。getWindow(),但不能在其他窗口中使用。 显式存储primaryStage引用显然是唯一可行的方法。

由于您在Application #start(Stage primaryStage)方法中接收了主要阶段,因此您可以保留它。