FAQ JavaFXConsultez toutes les FAQ
Nombre d'auteurs : 4, nombre de questions : 507, dernière mise à jour : 2 novembre 2016 Ajouter une question
Cette FAQ a été réalisée à partir des questions fréquemment posées sur le forum JavaFX de http://java.developpez.com ainsi que l'expérience personnelle des auteurs.
Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant rédacteur, lisez ceci.
Sur ce, nous vous souhaitons une bonne lecture.
Pour créer une ligne temporelle, il faut utiliser la classe javafx.animation.Timeline ainsi que les classes associées.
Une ligne de temps consiste en une séquence d'étapes ou d'animations-clés appelées "keyframes" placées dans une ligne temporelle. Ces étapes permettent d'indiquer les changements dans l'état des propriétés qui servent à animer un nœud graphique. Une étape-clé est modélisée par la classe javafx.animation.KeyFrame.
L'exemple suivant affiche notre exemple habituel de rectangle rouge dans une fenêtre :
Code Java : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public class Main extends Application { @Override public void start(Stage primaryStage) { final Rectangle rectangle = new Rectangle(100, 100, 150, 100); rectangle.setFill(Color.RED); final Pane root = new Pane(); root.getChildren().setAll(rectangle); final Scene scene = new Scene(root, 350, 300); primaryStage.setTitle("Test de ligne temporelle"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } |
Pour animer le rectangle en faisant varier sa largeur, définie dans sa propriété width, nous pouvons déclarer une animation de la manière suivante :
Code Java : | Sélectionner tout |
1 2 3 4 5 6 | final KeyFrame keyFrameAt0s = new KeyFrame(Duration.ZERO, new KeyValue(rectangle.widthProperty(), 150)); final KeyFrame keyFrameAt1s = new KeyFrame(Duration.seconds(1), new KeyValue(rectangle.widthProperty(), 200)); final Timeline timeline = new Timeline(keyFrameAt0s, keyFrameAt1s); timeline.setCycleCount(Timeline.INDEFINITE); timeline.setAutoReverse(true); timeline.playFromStart(); |
Ici, le rectangle gris en pointillé indique la position et la taille initiales du rectangle rouge :
Ce code définit une animation qui dure une seconde et contient deux étapes-clés : il y a une étape-clé à zéro seconde et une autre à une seconde. À chaque fois, nous avons spécifié une valeur-clé liée à la propriété widthdu rectangle :
- À 0 seconde, la propriété width est à la valeur 150, sa valeur initiale ;
- À 1 seconde, la propriété width est à la valeur 200, sa valeur finale.
Durant l'animation, la valeur de la propriété width sera interpolée en fonction de l'indice de temps de l'animation entre ces deux valeurs. Pour spécifier une valeur-clé, vous devez utiliser la classe javafx.animation.KeyValue.
Notre animation se répète indéfiniment, car nous avons spécifié la constante Timeline.INDEFINITE, nous aurions pu également spécifier un nombre supérieur ou égal à 1.
De plus, la propriété autoReverse indique que l'animation s'inverse automatiquement lorsqu'elle arrive à la fin. Ainsi l'animation ira de l'étape 0s à l'étape 1s (une seconde d'attente entre les deux étapes) puis de l'étape 1s à l'étape 0s (à nouveau une seconde d'attente entre les deux étapes). Dans notre animation, nous verrons donc notre rectangle grandir puis rétrécir.
Si la propriété autoReverse reste à la valeur false, l'animation passera directement de l'étape 1s à l'étape 0s : notre rectangle grandit, puis reprend instantanément sa taille initiale puis grandit à nouveau, puis…
Enfin, l'appel à la méthode playFromStart() permet de démarrer une animation depuis le début de la ligne temporelle.
Lorsqu'on manipule une Timeline, l'interpolateur doit être spécifié sur les KeyValue créées pour chaque KeyFrame. Chaque valeur dispose de sa propre interpolation, indépendante de celles définies dans les autres valeurs.
Code Java : | Sélectionner tout |
final KeyValue keyValue = new KeyValue(Duration.millis(750), rectangle.widthProperty(), Interpolator.EASE_IN);
Par défaut, chaque nouvelle KeyValue créée a un interpolateur égal à Interpolator.LINEAR si on n'en a pas spécifié dans le constructeur.
Pour exécuter une action à un moment précis, il suffit d’insérer dans la ligne temporelle, un nouvel objet de type KeyFrame sur lequel on aura pris le soin d'attacher un callback de type EventHandler<ActionEvent> lors de son initialisation.
Par exemple, en faisant :
Code Java : | Sélectionner tout |
1 2 3 4 5 6 7 | final KeyFrame keyFrameAt750ms = new KeyFrame(Duration.millis(750), new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent actionEvent) { System.out.println("Nous sommes à 750ms !"); } }); |
Ou :
Code Java : | Sélectionner tout |
final KeyFrame keyFrameAt750ms = new KeyFrame(Duration.millis(750), actionEvent -> System.out.println("Nous sommes à 750ms !"));
Il existe plusieurs constructeurs dans la classe KeyFrame qui acceptent un tel callback.
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.