IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaFX Discussion :

Timer java fx


Sujet :

JavaFX

  1. #1
    Membre à l'essai
    Homme Profil pro
    Lycéen(seconde)
    Inscrit en
    Octobre 2018
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen(seconde)

    Informations forums :
    Inscription : Octobre 2018
    Messages : 32
    Points : 20
    Points
    20
    Par défaut Timer java fx
    Bonjour,

    j'ai eu l'idée de crée un timer pour voir le temps en jeux . J'ai fait ceci mais le timer reste à 0 :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private int timerj1 = 0;
     
    Label ltim = new Label("Timer :" + " " + timerj1);
    ltim.setVisible(false);
    Timeline loop4 = new Timeline(new KeyFrame(Duration.seconds(1), new EventHandler<ActionEvent>(){
      public void handle(ActionEvent arg) {			                	
        timerj1 ++;
      }
    }));
    loop4.play();

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Bon soit pourquoi pas même si je suis pas sur que Timeline soit la meilleure manière de faire ca ?
    Et, euh, comment le label pourrait-il changer son texte puisqu'il ignore totalement tout du changement de valeur de timerj1 ?????

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void handle(ActionEvent arg) {
    	timerj1 ++;
    	ltim.setText("Timer :  " + timerj1);
    }
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre à l'essai
    Homme Profil pro
    Lycéen(seconde)
    Inscrit en
    Octobre 2018
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen(seconde)

    Informations forums :
    Inscription : Octobre 2018
    Messages : 32
    Points : 20
    Points
    20
    Par défaut Javafx timer
    Bonjour,
    merci de m’avoir répondu, je n'avais pas penser à ceci, c'est une trés bonne idée mais cela ne marche pas puisque le timer par de 0 , va jusqu'à 1 mais après il reste et il bloque à 1.

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Ce qui est normal puisque TimeLine non-seulement sert a faire des animation et non pas des timer mais en plus ici ne boucle pas (donc il s’exécute une seule et unique fois).

    Et de plus, même si tu le faisais boucler, lorsqu'on fait une TimeLine qui boucle un certain nombre de fois ou qui se répète indéfiniment, elle n'invoque pas son handle de toute manières (d’où ma remarque que ce n’était sans doute pas la meilleur classe pour ça)...

    Pour conserver la chose simple on va rester sur le principe de TimeLine que tu sembles vouloir utiliser mais on va passer sur des classes dédiés, a savoir des Transition, histoire de simplifier le code :

    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
    package timer;
     
    import javafx.animation.PauseTransition;
    import javafx.animation.SequentialTransition;
    import javafx.application.Application;
    import javafx.stage.Stage;
    import javafx.util.Duration;
     
    public class Main extends Application {
        private int time = 0;
     
        @Override
        public void start(final Stage stage) throws Exception {
            stage.show();
            final var pause = new PauseTransition(Duration.seconds(1));
            pause.setOnFinished(event -> System.out.println(++time));
            final var timer = new SequentialTransition(pause);
            timer.setCycleCount(PauseTransition.INDEFINITE);
            timer.play();
            stage.setOnCloseRequest(event -> timer.stop());
        }
    }
    Ce qu'il faut retenir :
    • PauseTransition sert a faire une pause et a incrémenter le timer quand elle se termine.
    • SequentialTransition sert a boucler la pause, car si on faisait boucler directement PauseTransition jamais l’incrémentation n'aurait lieu.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Membre à l'essai
    Homme Profil pro
    Lycéen(seconde)
    Inscrit en
    Octobre 2018
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen(seconde)

    Informations forums :
    Inscription : Octobre 2018
    Messages : 32
    Points : 20
    Points
    20
    Par défaut
    Bonjour,
    merci de m'avoir répondu mais moi je suis sur eclipse 8 et non pas sur eclipse 10 donc il ne reconnait pas var et je voudrais afficher le chronomètre dans mon application en non pas dans la console, dans mon jeux avec des Label, un pour les seconds et l'autre pour les minutes, mais pas pour les heures.merci

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Alors :
    1. Ce qui est impossible à savoir d'après tes posts précédents à part le fait que tu utilises encore du code pre-JDK7 qui reste totalement compatible et accepté par les IDE récents.
    2. Et c'est si difficile que ça de modifier le code en replaçant var par le type approprié. Ce code fait littéralement 7 lignes et var n'y est présent que 2 fois... trop dur la vie..
    3. Même type de remarque : qu'est ce qui t’empêche d'adapter ce code de test à ton environment graphique ? Et on a déjà vu précédemment que ce qui clochait pour la mise à jour de ton Label...


    Tu as les bases, à toi de faire le reste du boulot ; quitte à revenir poser une autre question plus tard si tu rencontre un écueil.
    Un peu d'initiative les gens (ce n'est pas histoire d'être méchant, c'est vraiment comme ça que ça fonctionne - le code que j'ai écrit ci-dessus est facilement transposable dans le code que tu as posté au début)
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  7. #7
    Membre à l'essai
    Homme Profil pro
    Lycéen(seconde)
    Inscrit en
    Octobre 2018
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen(seconde)

    Informations forums :
    Inscription : Octobre 2018
    Messages : 32
    Points : 20
    Points
    20
    Par défaut
    Bonjour,

    merci de m'avoir répondu, j'ai donc réadapter le code :


    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
       Label ltim = new Label("Timer :" + " " + timerj1);
    			            ltim.setVisible(true);
    			            ltim.setFont(Font.font(30));
     
     
     
    			          int ltimp = timerj1 +1;
     
    			            Timeline loop4 = new Timeline(new KeyFrame(Duration.seconds(1), new EventHandler<ActionEvent>(){
    			                public void handle(ActionEvent arg) {
     
    			                	timerj1 ++;
    			                	ltim.setText("Timer :" + ltimp);
     
     
    			                }
    			                }));
    			            loop4.play();

  8. #8
    Membre à l'essai
    Homme Profil pro
    Lycéen(seconde)
    Inscrit en
    Octobre 2018
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen(seconde)

    Informations forums :
    Inscription : Octobre 2018
    Messages : 32
    Points : 20
    Points
    20
    Par défaut
    Le mieux je pense c'est que je sois à jour dans mon idk ecplise, donc il faudrait le mettre à jour pour qu'il soit en version 2019 car celui que j'utilise est en version décembre 2018. Mais le fait de le mettre à jour, il ne va peut être pas comprendre mon ancien code et donc je dois tout recommencer, sachant qu'il fait environ 5000 lignes, et que c'est mon tout premier jeux, je ne sais pas. Vous en pensez quoi?

  9. #9
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Non comme je te le disais ton code sera complètement compris par un IDE plus à jour.
    Par contre l'IDE plus récent va sans doute te proposer de le transformer pour le mettre au gout du jour ce qui, si tu applique ces modifications, sera peut être problématique pour toi si tu ne connais ou ne maîtrise pas encore cette syntaxe.
    Et puis ce n'est pas forcément une bonne idée aussi si c'est un code pour un exercice d'école et qu'il faille que le prof puisse le comprendre également (idem si le prof ne maîtrise pas la syntaxe il y pigera que dalle).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    final var pause = new PauseTransition(Duration.seconds(1));
    C'est tout bonnement la même chose que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    final PauseTransition pause = new PauseTransition(Duration.seconds(1));
    Tu peux voir que la différence n'est pas immense, var remplace juste le type de la variable.
    Tandis que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pause.setOnFinished(event -> System.out.println(++time));
    est exactement la meme chose que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    pause.setOnFinished(new EventHandler<ActionEvent>(){
        public void handle(ActionEvent event) {
            System.out.println(++time));
        }
    });
    Ici il s'agit d'une expression lambda qui permet de simplifier l'écriture; on reconnait event (le paramètre de la fonction handle()) ainsi que le code qui était contenu entre {}

    De plus comme JavaFX n'est plus intégré de base dans le JDK 11 ou suivant ; tu devras faire plusieurs étapes supplémentaires pour le rajouter si tu décides d'installer un des JDK les plus récents également. Or ces étapes ne sont pas forcément abordables à ton niveau. Aucun soucis si tu restes avec les JDK 7.2, 8, 9 ou 10.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  10. #10
    Membre à l'essai
    Homme Profil pro
    Lycéen(seconde)
    Inscrit en
    Octobre 2018
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen(seconde)

    Informations forums :
    Inscription : Octobre 2018
    Messages : 32
    Points : 20
    Points
    20
    Par défaut
    Bonjour,

    merci de m'avoir répondu, juste pour info : ce n'est pas un travail à faire pour l'école, c'est juste que je m'intéresse à l’informatique et que je vais m'orienter sur ce domaine plus tard.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Lycéen(seconde)
    Inscrit en
    Octobre 2018
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen(seconde)

    Informations forums :
    Inscription : Octobre 2018
    Messages : 32
    Points : 20
    Points
    20
    Par défaut
    Voici ce que j'ai fais mais cela na marche pas ( je pense que le problème est que la label ne s'affiche pas quand timerj1 augmente de +1):

    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
     
     
    private int time = 0;
    private  int timerj1 = 0;
     
    Label timr = new Label("Timer :" + " " + timerj1);
    			            timr.setLayoutX(400);
    			            timr.setLayoutY(20);
    			            timr.setVisible(false);
    			            timr.setTextFill(Color.RED);
    			            timr.setFont(Font.font(20));
     
     
     
     
     
    			            	final PauseTransition pause = new PauseTransition(Duration.seconds(1));
    			                pause.setOnFinished(event ->timerj1 = ++time );
    			                final SequentialTransition timer3 = new SequentialTransition(pause);
    			                timer3.setCycleCount(PauseTransition.INDEFINITE);
    			                timer3.play();
    			                //timer.stop();

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/03/2013, 22h21
  2. exécution d'un timer JAVA
    Par Saiyan54 dans le forum Langage
    Réponses: 1
    Dernier message: 18/09/2006, 11h07
  3. programer un timer Java
    Par karim86 dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 21/07/2006, 17h34
  4. [java.util.Timer]Comment arrêter l'exécution d'un Thread
    Par Invité dans le forum Concurrence et multi-thread
    Réponses: 1
    Dernier message: 07/06/2006, 07h54
  5. [Java 1.4 timer] Nommer un timer ? c'est possible ?
    Par guipom dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 20/03/2006, 15h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo