2013-04-04 3 views
5

Ist es möglich, in einer laufenden JavaFX - Anwendung einen Verweis auf die Primärstufe zu erhalten?Wie kann ich die primäre Stufe in einer JavaFX-Anwendung erhalten?

Der Kontext dieser Frage ist, dass ich eine Bibliothek schreiben möchte, die eine JavaFX-Schnittstelle aus einer anderen Sprache (Prolog) manipuliert. Um dies zu tun, benötigt meine Bibliothek Zugriff auf die primäre Bühne. Das Ziel ist, dass der Programmierer der JavaFX-Anwendung keinen Verweis auf das Stage-Objekt in der start-Methode explizit speichern muss. Daher sollte es für den Benutzeroberflächen-Designer transparent sein (dies ist a related question, falls weitere Details benötigt werden).

Ein Teil dieses Problems ist es, einen Verweis auf das primäre Stage-Objekt der ursprünglichen JavaFX-Anwendung zu bekommen, also habe ich mich gefragt, ob mir etwas wie eine statische Methode dazu Zugang geben könnte.

Antwort

1

Da Sie die primäre Phase in der Methode Application # start (Stage primaryStage) erhalten, können Sie sie beibehalten.

2

Ich habe gerade dieses Problem untersucht. Es scheint keine eingebaute Methode zu geben, um die erste Stufe zu erhalten. Sie können node.getScene(). GetWindow() von einem Knoten innerhalb des Hauptfensters, aber nicht innerhalb anderer Fenster verwenden. Das explizite Speichern der primaryStage-Referenz ist anscheinend die einzige zuverlässige Möglichkeit, dies zu tun.

5

Nicht sicher über die richtige Entscheidung, aber es funktioniert für meinen Fall.

statisches Feld in Hauptklasse erstellen mit Getter und 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; 
    } 
} 

Als nächstes wird in der erforderlichen Stelle Aufruf Getter. Zum Beispiel:

stageSecond.initOwner(MyApp.getPrimaryStage()); 
Verwandte Themen