sommaire

Le chronomètre

L'applet

le chronomètre

Le source

import java.awt.*;
import java.applet.Applet;
 
public class Chrono extends Applet implements Runnable
{  
  private Thread chronometre;
  private int    dixiemeseconde = 0;
  
  // Méthode appelée par le système au démarrage de l'applet
  public void start ()
  {
    // Au début de l'applet, création et démarrage du chronomètre
    chronometre = new Thread (this);
    chronometre.start ();
  }
 
  public void run ()
  {
    try
    {
      while (chronometre.isAlive ())
      {
        // Dessine le compteur (appel indirect à la méthode paint ()), 
        // puis l'augmente de 1
        repaint ();
        dixiemeseconde++;
        // Arrête le thread pendant 1/10 s (100 ms)
        Thread.sleep (100);
      }
    }
    catch (InterruptedException e) { }
  }
 
  // Méthode appelée par le système à l'arrêt de l'applet
  public void stop ()
  {
    // A la fin de l'applet, arrêt du chronometre
    chronometre.stop ();
  }
 
  // Méthode appelée par le système pour mettre à jour le dessin de l'applet
  public void paint (Graphics gc)
  {
    // Dessine le temps écoulé sous forme de hh:mm:ss:d en noir et helvetica
    gc.setColor (Color.black);
    gc.setFont  (new Font ("TimesRoman", Font.BOLD, getSize ().height));
    gc.drawString (dixiemeseconde / 36000
                   + ":" + (dixiemeseconde / 6000) % 6 + (dixiemeseconde / 600) % 10
                   + ":" + (dixiemeseconde / 100) % 6  + (dixiemeseconde / 10) % 10
                   + ":" + dixiemeseconde % 10,
                   2, getSize ().height - 2);
  }
}

Pour controler ce chronomètre on pourra utiliser l'applet suivante

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class lanceur extends Applet implements ActionListener
{
  Applet   leChrono = null;
  Button   bouton;

  public void init ()
  {add (bouton = new Button ("STOP"));
   bouton.addActionListener(this);
   leChrono = getAppletContext ().getApplet("chrono");
  }
    
  // Méthode appelée quand on clique sur le bouton
  public void actionPerformed(ActionEvent e) 
  {      
      if (bouton.getLabel().equals("STOP")){
      leChrono.stop();
      bouton.setLabel("DEMARRER");
      }
      else{
      leChrono.start();
      bouton.setLabel("STOP");
      }
   bouton.invalidate ();
   validate ();
  }
 }

Vous remarquerez que seule l'applet chrono du bas est effectivement arrêtée, en effet j'ai pris soin de préciser dans le fichier HTML pour cette deuxième applet:

<applet width="200" height="30" name="chrono" code="Chrono.class"></applet>