web-dev-qa-db-fra.com

Comment créer un écran Splash avec un fond transparent dans JavaFX

J'essaie de créer un écran de démarrage comme l'exemple que j'ai fourni. Il semble que AnchorPane n'autorise pas l'arrière-plan transparent, j'ai essayé de définir le CSS de AnchorPane sur -fx-background-color: rgba(255,0,255,0.1) ; mais l'arrière-plan blanc apparaît toujours.

Tout ce que j'ai dans mon fichier fxml est un AnchorPane avec ImageView avec contient l'image png

Example

J'ai cherché partout mais je ne trouve aucune solution, toute aide serait appréciée. Merci

23
francisOpt

Essayez ceci exemple de splash JavaFX créé pour la question Stackoverflow: Designing a splash screen (Java) . Et un exemple de suivi qui fournit également des informations sur la progression de l'initialisation de l'application.

JavaFX offre l'interface Preloader pour un transfert en douceur du splash à l'application, mais les exemples ci-dessus ne l'utilisent pas.

Les échantillons de splash ci-dessus ne font pas non plus l'effet transparent, mais cela exemple de dialogue vous montre comment faire et vous pouvez le combiner avec les échantillons de splash précédents pour obtenir l'effet que vous voulez.

L'effet transparent est créé par:

  1. stage.initStyle(StageStyle.TRANSPARENT).
  2. scene.setFill(Color.TRANSPARENT).
  3. Assurez-vous que votre nœud racine n'est pas un rectangle carré opaque.

Tout cela est démontré dans l'échantillon de Sergey.

Question connexe:

Mise à jour avril 2016 en fonction de questions supplémentaires

l'image du préchargeur n'est pas au premier plan. J'ai essayé stage.toFront (), mais n'aide pas.

Une nouvelle API a été créée en Java 8u20 stage.setAlwaysOnTop (true) . J'ai mis à jour le échantillon lié pour l'utiliser sur le splash initial l'écran, ce qui facilite la transition vers l'écran principal.

Pour Java8 +

Pour modena.css (la définition par défaut de l'aspect et de la convivialité JavaFX dans Java 8), un arrière-plan légèrement ombré a été introduit pour tous les contrôles (ainsi que pour les volets si un contrôle est chargé).

Vous pouvez supprimer cela en spécifiant que l'arrière-plan par défaut est transparent. Cela peut être fait en ajoutant la ligne suivante au fichier CSS de votre application:

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

Si vous le souhaitez, vous pouvez utiliser des classes et des règles de style CSS ou un appel setStyle (comme illustré dans la réponse de Sergey) pour vous assurer que le paramètre ne s'applique qu'à la racine de votre écran de démarrage plutôt qu'à tous les écrans de votre application.

Voir connexes:

24
jewelsea

Vous devez avoir transparent Stage et Scene pour cela. Pane lui-même n'a pas de couleur.

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();
}
14
Sergey Grinev