home *** CD-ROM | disk | FTP | other *** search
/ PCMania 2 / Pcmania_Ep2_02_CD-01.iso / ARTICULOS / CREATIVIDAD / DEMOSCENE / JAVA / Marquee.java < prev   
Encoding:
Java Source  |  1999-01-01  |  3.7 KB  |  110 lines

  1. import java.awt.Graphics;
  2. import java.awt.Font;
  3. import java.awt.FontMetrics;
  4. import java.awt.Color;
  5. import java.awt.Image;
  6. import java.util.*;
  7.  
  8. /* ╔ste applet consiste en una marquesina de texto, es decir en un texto
  9.     se mueve a travΘs del applet.
  10.     
  11.     El applet tiene como parßmetros de entrada el color del fondo, del texto,
  12.     el avance de movimiento del texto y el retardo.
  13. */
  14. public class marquee extends java.applet.Applet implements Runnable {
  15.     
  16.     Font letra = new Font("TimesRoman",Font.BOLD,36); // Tipo de letra y tama±o que se usarß
  17.     FontMetrics fmetrics = getFontMetrics (letra);     /*Este objeto se usa para averiguar el 
  18.                                      tama±o en pφxeles de la cadena.*/
  19.     Thread runner; //Este objeto se usa para un subproceso
  20.     String cadena; //Variable donde leemos la cadena
  21.     int rebote;    //Variable que nos dice el ancho en pφxeles de la cadena
  22.     int ancho;     //Variable donde almacenamos el ancho del applet
  23.     int pos;     //Posici≤n de la cadena
  24.     int avance;    //Avance en pφxeles de la cadena
  25.     int delay;     //Retardo de avance de la cadena
  26.     Color colorFondo; //Color del fondo del Applet
  27.     Color colorTexto; //Color del texto
  28.     
  29.     Image imagenVirtual; //Objeto imagen para hacer un doble buffer y evitar el parpadeo
  30.     Graphics pantallaVirtual;
  31.         
  32.     //El mΘtodo init se ejecuta al iniciar el applet
  33.     public void init () {
  34.         
  35.         //Leemos los parßmetros de entrada haciendo las conversiones necesarias
  36.         colorFondo = new Color(Integer.parseInt(getParameter("colorFondo"),16));
  37.         colorTexto = new Color(Integer.parseInt(getParameter("colorTexto"),16));
  38.         avance     =           Integer.parseInt(getParameter ("avance"),16);
  39.         delay      =           Integer.parseInt(getParameter ("delay"),16);
  40.         
  41.         cadena = getParameter ("cadena");
  42.         
  43.         ancho  = this.getBounds().width;
  44.         pos    = ancho;
  45.         rebote = -(fmetrics.stringWidth(cadena)); /* usamos el objeto fmetrics para obtener
  46.                                     la longitud de la cadena*/
  47.         
  48.         //Creamos un objeto imagen del tama±o del applet
  49.         imagenVirtual   = createImage (size().width,size().height);
  50.         //Creamos un objeto graphics para la imagen anterior
  51.         pantallaVirtual = imagenVirtual.getGraphics();
  52.     }        
  53.     
  54.     //Este mΘtodo inicia un subproceso
  55.     public void start () {
  56.         if (runner == null) {
  57.             runner = new Thread(this);
  58.             runner.start ();
  59.       }
  60.     }
  61.     
  62.     //Este mΘtodo detiene un subproceso
  63.     public void stop () {
  64.         if (runner != null) {
  65.             runner.stop ();
  66.             runner = null;
  67.         }
  68.     }
  69.     
  70.     //Este mΘtodo es el subproceso
  71.     public void run() {
  72.         while (true) {     //Con Θsta instrucci≤n creamos un bucle infinito
  73.             repaint (); //Pintamos la pantalla
  74.             
  75.              /*Si la posici≤n es mayor que la longitud de la cadena retrocedemos
  76.                sino es por que el texto entero se ha desplazado por el applet y 
  77.                entonces hay que empezar de nuevo*/
  78.             if (pos > rebote) {pos -= avance;}    else {pos = ancho;}
  79.             
  80.             //Intentamos el retardo y si no capturamos la excepeci≤n
  81.             try {Thread.sleep (delay);}
  82.             catch (InterruptedException e) {}
  83.             }
  84.     }
  85.     
  86.     //Este mΘtodo se ejecuta para actualizar el applet    
  87.     public void update (Graphics g) {
  88.         paint (g);
  89.     }
  90.     
  91.     //Este mΘtodo se usa para pintar en el applet
  92.     public void paint (Graphics g) {
  93.         //Pintamos el fondo y el texto en la pantalla virtual
  94.         pantallaVirtual.setColor (colorFondo);
  95.         pantallaVirtual.fillRect (0,0,this.size().width,this.size().height);
  96.         pantallaVirtual.setFont (letra);
  97.         pantallaVirtual.setColor (colorTexto);
  98.         pantallaVirtual.drawString (cadena,pos,40);
  99.         
  100.         //Pasamos el buffer al grßfico del applet evitando asφ el parpadeo
  101.         g.drawImage(imagenVirtual,0,0,this);
  102.         
  103.     }
  104.     
  105.     //Destruimos el objeto creado
  106.     public void destroy () {
  107.         pantallaVirtual.dispose ();    
  108.     }
  109. }
  110.