2013-02-20 18 views
19

Sto cercando di creare una schermata iniziale come nell'esempio che ho provato. Sembra che AnchorPane non consenta lo sfondo trasparente, ho provato a impostare il css dello AnchorPane su -fx-background-color: rgba(255,0,255,0.1) ; ma lo sfondo bianco appare ancora.Come creare una schermata Splash con sfondo trasparente in JavaFX

Tutto quello che ho nel mio file fxml è un AnchorPane con ImageView con contenere l'immagine png

Example

ho cercato ovunque, ma non riesce a trovare alcuna soluzione, tutto l'aiuto sarebbe apprezzato. Grazie

risposta

19

Prova questa JavaFX splash sample creato per la domanda StackOverflow: Designing a splash screen (java). E uno follow up sample che fornisce anche feedback sull'avanzamento dell'inizializzazione dell'applicazione.

JavaFX offre l'interfaccia Preloader per un trasferimento fluido da splash all'applicazione, ma gli esempi sopra non ne fanno uso.

Anche gli esempi di splash sopra non fanno l'effetto trasparente, ma questo dialog sample mostra come farlo e puoi combinarlo con i precedenti campioni di splash per ottenere l'effetto desiderato.

L'effetto trasparenza viene creato da:

  1. stage.initStyle(StageStyle.TRANSPARENT).
  2. scene.setFill(Color.TRANSPARENT).
  3. Assicurarsi che il nodo radice non sia un rettangolo quadrato opaco.

Che è tutto dimostrato nel campione di Sergey.

questione connessa:

Aggiornamento Apr 2016 sulla base di ulteriori domande

il preloader immagine isnt in primo piano. Ho provato stage.toFront(), ma non aiuta.

Una nuova API è stata creata in Java 8u20 stage.setAlwaysOnTop(true). Ho aggiornato linked sample per utilizzarlo nella schermata iniziale iniziale, che aiuta a facilitare una transizione più graduale alla schermata principale.

Per Java8 +

Per modena.css (il default JavaFX look and feel definizione in Java 8), un leggero sfondo ombreggiato è stato introdotto per tutti i controlli (e anche di vetri se un controllo viene caricato).

È possibile rimuovere questo specificando che lo sfondo predefinito è trasparente. Questo può essere fatto aggiungendo la seguente riga al file CSS dell'applicazione:

.root { -fx-background-color: transparent; } 

Se lo si desidera, è possibile utilizzare le classi di stile CSS e regole o una chiamata setStyle (come dimostrato nella risposta di Sergey) per assicurare che l'impostazione si applica solo alla radice della schermata iniziale anziché a tutte le schermate dell'app.

Vedi correlato:

+1

+1 per aver menzionato Preloader – Puce

+0

Grazie ragazzi! Entrambe le risposte sono buone ma 'scene.setFill (Color.TRANSPARENT) .' Non è necessario specificare la larghezza e l'altezza della scena – francisOpt

+0

Si è verificato un colpo di milisecondo con lo sfondo visibile quando è stata mostrata la scena. Sono riuscito a risolvere questo problema chiamando: 'root.setCache (true); root.setCacheHint (CacheHint.SPEED); '_ (dove root è l'istanza Parent) _. – stuchl4n3k

13

È necessario avere trasparente Stage e Scene per quello. Pane stesso non ha un colore.

public void start(Stage primaryStage) { 
    Button btn = new Button("Say 'Hello World'"); 

    AnchorPane root = new AnchorPane(); 
    root.getChildren().add(btn); 

    // Java 8: requires setting the layout pane background style to transparent 
    // https://bugs.openjdk.java.net/browse/JDK-8092764 
    // "Modena uses a non-transparent background by default" 
    root.setStyle("-fx-background-color: transparent;"); 

    Scene scene = new Scene(root, 300, 250, Color.TRANSPARENT); 
    primaryStage.initStyle(StageStyle.TRANSPARENT); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 
+0

come farò a questo test di unità. Ho semplicemente provato a testare l'unità ma non mostra l'errore del thread dell'applicazione fx. – vinay

+0

@vinay dai un'occhiata alle prossime domande: http://stackoverflow.com/questions/11385604/how-do-you-unit-test-a-javafx-controller-with-junit e http://stackoverflow.com/ domande/10599724/gui-testing-framework-for-javafx-2/10600676 –

Problemi correlati