2013-04-04 49 views
5

是否有可能在運行的JavaFX應用程序中獲得對主要階段的引用?如何在JavaFX應用程序中獲得主要階段?

這個問題的上下文是我想編寫一個操作另一種語言(Prolog)的JavaFX接口的庫。 爲了做到這一點,我的圖書館需要訪問主要階段。 目標是JavaFX應用程序的程序員不必在啓動方法中明確存儲對舞臺對象的引用,因此它對用戶界面設計器應該是透明的(如果需要更多詳細信息,這是a related question)。

此問題的一部分是獲取對原始JavaFX應用程序的主要Stage對象的引用,所以我想知道是否有類似某個靜態方法的東西可以讓我訪問該對象。

回答

1

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

2

我只是在研究這個問題。似乎沒有任何內置的方法來獲得初級階段。您可以從主窗口內的節點使用node.getScene()。getWindow(),但不能在其他窗口內使用。顯式存儲primaryStage引用顯然是唯一可行的方法。

5

不確定正確的決定,但它適用於我的情況。

與getter和setter創建主類靜態字段:

public class MyApp extends Application { 

    private static Stage pStage; 

    @Override 
    public void start(Stage primaryStage) { 
     setPrimaryStage(primaryStage); 
     ... 
    } 

    public static Stage getPrimaryStage() { 
     return pStage; 
    } 

    private void setPrimaryStage(Stage pStage) { 
     MyApp.pStage = pStage; 
    } 
} 

接下來,在必要的地方調用的getter。例如:

stageSecond.initOwner(MyApp.getPrimaryStage()); 
相關問題