Bonjour,

Lorsque je clic sur des boutons de mon application, des événements affichent leurs page demandés en passant par une animation de FadeIn/FadeOut (géré par l'opacité).
Cependant, lors du FadeOut/FadeIn de la page précédente, on est présenté par une fenêtre blanche. Je voudrais faire en sorte que :
- soit je fais un FadeOut/FadeIn puis, FadeIn/FadeOut, couplé par une couleur de fond qui ne subira aucun changement d'opacité entre les pages.
- soit je fais un FadeOut/FadeIn en remplaçant le changement d'opacité par une couleur de fond unique/ou objet image...?

Voici le code que j'ai à vous présenter, je voudrais avoir votre avis sur la méthode a plus sûr, et optimisée.
J'ai une préférence pour la seconde méthode, mais je suis aussi ouvert à toutes autres dont je n'aurais pas pensé.

Je ne m'y connais pas en "KeyFrame", alors je suis ouvert à toutes autres propositions.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 
    public Boolean setScreen(final String name) {
        if (getScreen(name) != null) {
            final DoubleProperty opacity = opacityProperty();
            final ObjectProperty<Color> baseColor = new SimpleObjectProperty<>();
 
            if (!getChildren().isEmpty()) {
                Timeline fade = new Timeline(
                        new KeyFrame(Duration.ZERO, new KeyValue(opacity, 1.0)),
                        new KeyFrame(new Duration(500), new EventHandler<ActionEvent>() {
                            @Override
                            public void handle(ActionEvent event) {
                                getChildren().remove(0);
                                getChildren().add(0, getScreen(name));
                                Timeline fadeIn = new Timeline(
                                        new KeyFrame(Duration.ZERO, new KeyValue(opacity, 0.0)),
                  /*ICI SVP--->*/       new KeyFrame(Duration.ZERO, new KeyValue(baseColor, Color.BLACK)), // ??? FONCTIONNE PAS
                                        new KeyFrame(new Duration(500), new KeyValue(opacity, 1.0))
                                );
                                fadeIn.play();
                            }
                        }, new KeyValue(opacity, 0.0))
                );
                fade.play();
            }
 
            else {
                setOpacity(0.0);
                getChildren().add(getScreen(name));
 
                Timeline fadeIn = new Timeline(
                        new KeyFrame(Duration.ZERO, new KeyValue(opacity, 0.0)),
                        new KeyFrame(new Duration(800), new KeyValue(opacity, 1.0))
                );
                fadeIn.play();
            }
            return (true);
        }
        else {
            System.out.println("Screen Has Not Been Loaded");
            return (false);
        }
    }
Pour le code complet --->>> ICI JE VOUS PRIE