2013-04-04 5 views
5

実行中のJavaFXアプリケーションでプライマリステージへの参照を取得することは可能ですか?JavaFXアプリケーションでプライマリステージを取得するにはどうすればよいですか?

この質問のコンテキストは、別の言語(Prolog)からJavaFXインターフェイスを操作するライブラリを作成することです。 これを行うには、私のライブラリにプライマリステージへのアクセスが必要です。 目的は、JavaFXアプリケーションのプログラマが、startメソッドのStageオブジェクトへの参照を明示的に格納する必要がないため、ユーザーインターフェイスデザイナにとって透過的である必要があることです(これは詳細が必要な場合はa related questionです)。

この問題の一部は、元のJavaFXアプリケーションのプライマリステージオブジェクトへの参照を取得しているため、静的メソッドのようなものが私にアクセスできるかどうか疑問に思っていました。

答えて

1

Application#start(Stage primaryStage)メソッドでプライマリステージを受け取ったので、それを保持しておくことができます。

2

私はちょうどこの問題を研究していました。プライマリステージを取得するための組み込みメソッドはありません。メインウィンドウ内のノードからはnode.getScene()。getWindow()を使用できますが、他のウィンドウ内では使用できません。 primaryStageリファレンスを明示的に格納することは、これを実行する唯一の確実な方法です。

5

正しい判断は不明ですが、私の場合はうまくいきます。

はゲッターとセッターをメインクラスに静的フィールドを作成します。

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; 
    } 
} 

次に、ゲッターを呼び出す必要な場所に。たとえば、

stageSecond.initOwner(MyApp.getPrimaryStage()); 
関連する問題