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

j'essaie de créer un écran d'éclaboussure comme l'exemple que j'ai fourni. Il semble que AnchorPane ne permette pas de fond transparent, j'ai essayé de configurer le css du AnchorPane-fx-background-color: rgba(255,0,255,0.1) ; mais le fond blanc apparaît toujours.

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

Example

j'ai cherché partout mais ne trouve pas de solution, toute aide serait appréciée. Merci

19
demandé sur francisOpt 2013-02-20 08:15:49

2 réponses

Essayez ceci JavaFX splash sample créée pour l'Stackoverflow question: la Conception d'un écran de démarrage (java). Et un suivi échantillon qui fournit également une rétroaction sur le progrès de l'initialisation de l'application.

JavaFX offre le Preloader interface pour le transfert en douceur de splash à application, mais les échantillons ci-dessus ne font pas usage de celui-ci.

Le démarrage de l'exemple ci-dessus, aussi, ne pas faire la transparence effet, mais c' exemple de dialogue vous montre comment le faire et vous pouvez les combiner avec la précédente splash échantillons pour obtenir l'effet que vous voulez.

l'effet transparent est créé par:

  1. stage.initStyle(StageStyle.TRANSPARENT).
  2. scene.setFill(Color.TRANSPARENT).
  3. S'assurer que votre noeud racine n'est pas un rectangle carré opaque.

ce qui est démontré dans L'échantillon de Sergey.

connexes question:

mise à jour avril 2016 basée sur des questions supplémentaires

l'image de pré-chargement n'est pas au premier plan. J'ai essayé de la scène.toFront (), but doesn't help.

une nouvelle API a été créée en Java 8u20 stade.setAlwaysOnTop (true). J'ai mis à jour l' lié exemple utiliser cela sur l'écran de projection initiale, ce qui aide dans une transition plus douce à l'écran principal.

Pour Java8+

Pour modène.css (La définition par défaut de JavaFX look and feel En Java 8), un arrière-plan légèrement ombré a été introduit pour tous les contrôles (et aussi pour les vires si un contrôle est chargé).

vous pouvez supprimer ceci en spécifiant que le fond par défaut est transparent. Cela peut être fait en ajoutant la ligne suivante à votre fichier CSS de l'application:

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

si vous le souhaitez, vous pouvez utiliser CSS style classes and rules ou un appel setStyle (comme démontré dans la réponse de Sergey) pour s'assurer que le paramètre ne s'applique qu'à la racine de votre écran splash plutôt qu'à tous vos écrans app.

Voir:

19
répondu jewelsea 2018-01-29 16:11:07

vous devez avoir transparent Stage et Scene pour que. Pane elle-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();
}
13
répondu Sergey Grinev 2018-01-29 16:15:34