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

AWT/Swing Java Discussion :

[Timer] Classes internes et actionEvent


Sujet :

AWT/Swing Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 55
    Par défaut [Timer] Classes internes et actionEvent
    Bonjour, j'aurais besoin que vous me commentiez en détail le code ci-dessus , en particulier comment est appellée action Performed et en boucle? Bref les actions pas à pas:J'ai du mal à voir ce qui se passe dans le bloc void start.Merci

    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
    44
    45
    46
    47
    48
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import javax.swing.*;
    import javax.swing.Timer;
     
    public class LocalInnerClassTest
    {  
       public static void main(String[] args)
       {  
          TalkingClock clock = new TalkingClock();
          clock.start(1000, true);
     
          // keep program running until user selects "Ok"
          JOptionPane.showMessageDialog(null, "Quit program?");
          System.exit(0);
       }
    }
     
    /**
       A clock that prints the time in regular intervals.
    */
    class TalkingClock
    {  
       /**
          Starts the clock.
          @param interval the interval between messages (in milliseconds)
          @param beep true if the clock should beep
       */
       public void start(int interval, final boolean beep)
       {
          class TimePrinter implements ActionListener
          {  
             public void actionPerformed(ActionEvent event)
             {  
                Date now = new Date();
                System.out.println("At the tone, the time is " + now);
                if (beep) Toolkit.getDefaultToolkit().beep();
             }
          }
          ActionListener listener = new TimePrinter();
          Timer t = new Timer(interval, listener);
          t.start();
       }
     
       private int interval;
       private boolean beep;
    }
    [ Modéré par vedaer ]
    Ajout d'un tag dans le titre
    Les Règles du Forum

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Par défaut Re: Classes internes et actionEvent
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import javax.swing.*;
    import javax.swing.Timer;
     
    public class LocalInnerClassTest
    {  
       public static void main(String[] args)
       {  
          TalkingClock clock = new TalkingClock();
          clock.start(1000, true);
     
          // keep program running until user selects "Ok"
          JOptionPane.showMessageDialog(null, "Quit program?");
          System.exit(0);
       }
    }
     
    /**
       A clock that prints the time in regular intervals.
    */
    class TalkingClock
    {  
       /**
          Starts the clock.
          @param interval the interval between messages (in milliseconds)
          @param beep true if the clock should beep
       */
       public void start(int interval, final boolean beep)
       {
          // classs interne definissant un action listener
          class TimePrinter implements ActionListener
          {  
             public void actionPerformed(ActionEvent event)
             {  
                // affiche la date
                Date now = new Date();
                System.out.println("At the tone, the time is " + now);
                // si un beep est souhaité (test du boolean beep)  faire un beep
                if (beep) Toolkit.getDefaultToolkit().beep();
             }
          }
         // instanciation d'un actionListener defini ci-dessus.
          ActionListener listener = new TimePrinter();
         // cree une instance Timer, c'est à dire un nouveau Thread 
         //(tache de fond si tu prefere...) qui au bout d'une durée de 
         // interval millisecond va activer le listener.
         // cette instance comme tu la vu fonctionne en boucle.
          Timer t = new Timer(interval, listener);
         // l'instance Timer est initialisé mais non "lancée"
         // cad elle ne compte pas le temps.
         // la methode start lui dit de commencer.
          t.start();
       }
     
       private int interval;  // temps entre les beep
       private boolean beep; // faire un beep ou non
    }
    plus d'info à
    http://java.sun.com/docs/books/tutor...ntial/threads/
    Il ne faut pas confondre java.util.Timer avac java.swing.Timer
    mais comprendre le fonctionnement de l'un revient à comprendre le fonctionnement de l'autre..

    Edit : faire 2 topic pour la meme question pourraitre etre mal vu des modos...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 55
    Par défaut
    meric
    mais qui lance exactement la méhode

    public void actionPerformed(ActionEvent event)
    c'est le t.start() où start est considéré ou bien c t.start qui qui va lancer le tread de Time qui lance listener?
    Mais si y'avait plusieurs méthodes contenu en plus de actionPerformed, comment choisi t il celle -ci en partiulier?

  4. #4
    Membre chevronné Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Par défaut
    C'est le timer qui appelle actionPerformed lorsque le temps imparti est écoulé.

    S'il y avait plusieurs méthodes dans TimePrinter, la bonne serait reconnue simplement parce que, par convention, par contrat, il faut appeler actionPerformed. Ce contrat est exprimé dans les paramètres de Timer(int delay, ActionListener listener) : on voit que le second est un ActionListener, et c'est la méthode actionPerformed de cet ActionListener là qui sera appelée. Après, c'est juste un mécanisme de reconnaissance de signature des méthodes.

    Ce paramètre ActionListener est juste une interface, un contrat, qui garantit que l'objet passé comporte une méthode actionPerformed.

Discussions similaires

  1. [POO] Classe interne à une classe, est ce possible ?
    Par Matth_S dans le forum Langage
    Réponses: 13
    Dernier message: 10/02/2006, 10h24
  2. Heritage de classe avec classes internes
    Par Regis.C dans le forum Langage
    Réponses: 11
    Dernier message: 27/04/2005, 12h19
  3. [heritage] etendre une classe interne en dehors du package
    Par ChristopheH dans le forum Langage
    Réponses: 2
    Dernier message: 11/10/2004, 14h15
  4. [Débutant][Conception] Erreur avec une classe interne
    Par Devil Redneck dans le forum Général Java
    Réponses: 5
    Dernier message: 11/06/2004, 15h45
  5. [Thread] Erreur dans une classe interne
    Par totof2308 dans le forum Général Java
    Réponses: 5
    Dernier message: 03/06/2004, 08h15

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