2013-04-04 3 views
5

È possibile ottenere un riferimento allo stage primario in un'applicazione JavaFX in esecuzione ?.Come posso ottenere lo stage principale in un'applicazione JavaFX?

Il contesto di questa domanda è che mi piacerebbe scrivere una libreria che manipola un'interfaccia JavaFX da un'altra lingua (Prolog). Per fare ciò, la mia libreria richiede l'accesso allo stage principale. L'obiettivo è che il programmatore dell'applicazione JavaFX non debba memorizzare esplicitamente un riferimento all'oggetto Stage nel metodo start, quindi dovrebbe essere trasparente per il designer dell'interfaccia utente (questo è a related question nel caso siano necessari ulteriori dettagli).

Parte di questo problema è ottenere un riferimento all'oggetto Stage primario dell'applicazione JavaFX originale, quindi mi chiedevo se qualcosa come un metodo statico da qualche parte potesse darmi accesso a questo.

risposta

1

Dato che si riceve la fase principale nel metodo # Avvio applicazione (Stage primaryStage) è possibile mantenerlo in giro.

2

Stavo solo ricercando questo problema. Non sembra esserci alcun metodo integrato per ottenere lo stadio principale. È possibile utilizzare node.getScene(). GetWindow() da un nodo all'interno della finestra principale ma non da altre finestre. L'archiviazione esplicita del riferimento di PrimaryStage è apparentemente l'unico modo affidabile per farlo.

5

Non sono sicuro della decisione giusta, ma funziona per il mio caso.

Creare campo statico della classe principale con getter e 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; 
    } 
} 

Avanti, nella chiamando getter necessaria posto. Ad esempio:

stageSecond.initOwner(MyApp.getPrimaryStage());