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

Ser*_*gio 8 java javafx

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

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

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

Vla*_* Z. 7

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

使用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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

stageSecond.initOwner(MyApp.getPrimaryStage());
Run Code Online (Sandbox Code Playgroud)


Nic*_*rts 2

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