Fade out puis fade in javaFX
Résolu
andredrea
Messages postés
227
Date d'inscription
Statut
Membre
Dernière intervention
-
andredrea Messages postés 227 Date d'inscription Statut Membre Dernière intervention -
andredrea Messages postés 227 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je suis en train de faire une application en javafx, celle ci est composée d'une page de bienvenue avant l'arrivée sur le menu. Les effets sont un fade in du welcome, un fade out puis un fade in du
menu.
Les effets fonctionnent. Cependant, avant l'apparition progressive du menu, j'ai une sorte de flash du menu. Je ne vois pas quel est le probleme.
Si vous pouviez m'aider,
merci !
je suis en train de faire une application en javafx, celle ci est composée d'une page de bienvenue avant l'arrivée sur le menu. Les effets sont un fade in du welcome, un fade out puis un fade in du
menu.
Les effets fonctionnent. Cependant, avant l'apparition progressive du menu, j'ai une sorte de flash du menu. Je ne vois pas quel est le probleme.
Si vous pouviez m'aider,
merci !
package application; import java.io.File; import java.io.IOException; import java.net.URL; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.ResourceBundle; import javafx.animation.Animation; import javafx.animation.FadeTransition; import javafx.animation.KeyFrame; import javafx.animation.Timeline; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.fxml.Initializable; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.StackPane; import javafx.scene.text.Text; import javafx.util.Duration; public class MyController implements Initializable { @FXML private Text now; @FXML private Text update; @FXML private AnchorPane rootAP; @Override public void initialize(URL location, ResourceBundle resources) { if(!Main.isSplashLoaded){ loadSplashScreen(); } File file = new File("resources/bg2.jpg"); File date2 = new File("resources/bg8.jpg"); if(!file.exists() || !date2.exists()){ System.out.println("Erreur de fichier"); System.exit(0); } else { SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); String last; if(date2.compareTo(file) > 0){ last = sdf.format(date2.lastModified()); }else { last = sdf.format(file.lastModified()); } update.setText("Dernière mise à jour: "+last); Timeline clock = new Timeline(new KeyFrame(Duration.ZERO, e -> { DateFormat mediumDateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.SHORT); Date date = new Date(); now.setText(mediumDateFormat.format(date)); }), new KeyFrame(Duration.seconds(1)) ); clock.setCycleCount(Animation.INDEFINITE); clock.play(); } } private void loadSplashScreen(){ try { Main.isSplashLoaded = true; StackPane pane = FXMLLoader.load(getClass().getResource(("Splash.fxml"))); rootAP.getChildren().setAll(pane); FadeTransition fadeIn = new FadeTransition(Duration.seconds(3),pane); fadeIn.setFromValue(0); fadeIn.setToValue(1); fadeIn.setCycleCount(1); FadeTransition fadeOut = new FadeTransition(Duration.seconds(3),pane); fadeOut.setFromValue(1); fadeOut.setToValue(0); fadeOut.setCycleCount(1); fadeIn.play(); fadeIn.setOnFinished((e)->{fadeOut.play();}); fadeOut.setOnFinished((e)->{ try { AnchorPane parentContent = FXMLLoader.load(getClass().getResource(("Menu.fxml"))); rootAP.getChildren().setAll(parentContent ); FadeTransition fadeIn2 = new FadeTransition(Duration.seconds(3),parentContent); fadeIn2.setFromValue(0); fadeIn2.setToValue(1); fadeIn2.setCycleCount(1); fadeIn2.play(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } }); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
A voir également:
- Fade out puis fade in javaFX
- Av out - Forum Cinéma / Télé
- A quoi servent les prises av in et av out su - Forum Audio
- Dc in - Forum Audio
- Navigation in private - Guide
- Deco in paris avis ✓ - Forum Consommation & Internet
1 réponse
Bonjour,
Je n'ai pas testé, notamment parce que je n'ai pas tes fichiers .fxml donc ça ne va pas afficher grand chose, mais en général cela se produit parce que tu affiches ta fenêtre trop tôt, avant qu'elle ne sache qu'elle doit faire une animation au démarrage.
Je pense par exemple que
Remarque : quand tu as des expressions lambda simples comme
Exemple :
Je n'ai pas testé, notamment parce que je n'ai pas tes fichiers .fxml donc ça ne va pas afficher grand chose, mais en général cela se produit parce que tu affiches ta fenêtre trop tôt, avant qu'elle ne sache qu'elle doit faire une animation au démarrage.
Je pense par exemple que
fadeIn.play();devrait être appelé après le
fadeIn.setOnFinishedpour qu'il sache déjà comment se termine l'animation au moment où il la commence.
Remarque : quand tu as des expressions lambda simples comme
fadeIn.setOnFinished((e)->{fadeOut.play();});tu peux simplifier et mettre
fadeIn.setOnFinished(e -> fadeOut.play());, en revanche quand tu as des expressions beaucoup plus longues comme ton
fadeOut.setOnFinishedil faudrait penser à le mettre dans une méthode à part.
Exemple :
fadeOut.setOnFinished(this::fadeOutOnFinished)avec :
// import javafx.event.ActionEvent private void fadeOutOnFinished(ActionEvent evt) { try { AnchorPane parentContent = FXMLLoader.load(getClass().getResource(("Menu.fxml"))); rootAP.getChildren().setAll(parentContent); FadeTransition fadeIn = new FadeTransition(Duration.seconds(3), parentContent); fadeIn.setFromValue(0); fadeIn.setToValue(1); fadeIn.setCycleCount(1); fadeIn.play(); } catch (IOException e) { throw new UncheckedIOException(e); } }
Merci pour vos remarques j'en prend note ! Bonne aprem