Texte défilant

Nous allons créer l'applet DefilText qui fait défiler un texte passé en paramètre dans le fichier html.

Nous utiliserons le double buffering pour obtenir un affichage sans clignotements.

Déclarations

Commençons par déclarer les variables dont nous aurons besoin pour travailler.

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

        public class DefilText extends Applet 
         implements Runnable {

         String msg=null;          // message affiché
         Thread processus = null;  // le processus
         int x_coord=0;            // coordonnées d'affichage
         int y_coord=0;
         int len=0;                // longueur du message
         int speed=20;             // temps de pause
         //pour le double buffering
         Image img=null;           // image en mémoire
         Graphics gi=null;         // contexte graphique pour l'image

Méthode init

Nous nous contenterons de récupérer le texte à afficher et de définir les couleurs utilisées.

         public void init() {
          msg=getParameter("text");
          if (msg==null) msg="Texte défilant";
          setFont(new Font("TimesRoman",Font.BOLD,36));
          setBackground(Color.white);
          setForeground(Color.red);
         }

Gestion du processus

Nous reprenons le modèle vu dans l'activité précédente. La méthode run fera appel à la méthode faireImage que nous écrirons ensuite.

         public void start() {
          if (processus==null) {
           processus=new Thread(this);
           processus.start();
          }
         }

         public void stop() {
          if (processus!=null) processus.stop();
          processus=null;
         }

         public void run() {
          while (processus!=null) {
           faireImage();
           repaint();
           x_coord--;
           if (x_coord<=-len) x_coord=getSize().width;
           try {
            processus.sleep(speed);
           } catch (InterruptedException e){}
          }
          processus=null;
         }

L'instruction x_coord-- provoque le défilement en modifiant l'abscisse de la position d'affichage.

La ligne if (x_coord<=-len) x_coord=getSize().width; permet de reprendre l'affichage à son départ après un passage complet.

La méthode faireImage

Au premier appel cette méthode initialise l'image et les différentes variables concernant la position du texte. Elle remplit ensuite l'image avec la couleur de fond et affiche le texte avec la couleur d'affichage.

         public void faireImage() {
          if (len==0) { //calcul des mesures du texte
           img=createImage(getSize().width, getSize().height);
           gi=img.getGraphics();
           FontMetrics fm=gi.getFontMetrics();
           len=fm.stringWidth(msg);
           x_coord=getSize().width;
           y_coord=(getSize().height-fm.getHeight())/2+fm.getAscent();
          } 
          gi.setColor(getBackground());
          gi.fillRect(0,0,getSize().width,getSize().height);
          gi.setColor(getForeground());
          gi.drawString(msg,x_coord,y_coord);
         }

Méthodes paint et update

La méthode paint se contente d'afficher l'image. La méthode update est réécrite pour éviter l'effacement de l'applet qui provoque un scintillement.

         public void paint(Graphics g) {
          if (img!=null) g.drawImage(img,0,0,this);
         }

         public void update(Graphics g) {
          paint(g);
         }



Retour au menu