home *** CD-ROM | disk | FTP | other *** search
Java Source | 1999-01-01 | 3.7 KB | 110 lines |
- import java.awt.Graphics;
- import java.awt.Font;
- import java.awt.FontMetrics;
- import java.awt.Color;
- import java.awt.Image;
- import java.util.*;
-
- /* ╔ste applet consiste en una marquesina de texto, es decir en un texto
- se mueve a travΘs del applet.
-
- El applet tiene como parßmetros de entrada el color del fondo, del texto,
- el avance de movimiento del texto y el retardo.
- */
- public class marquee extends java.applet.Applet implements Runnable {
-
- Font letra = new Font("TimesRoman",Font.BOLD,36); // Tipo de letra y tama±o que se usarß
- FontMetrics fmetrics = getFontMetrics (letra); /*Este objeto se usa para averiguar el
- tama±o en pφxeles de la cadena.*/
- Thread runner; //Este objeto se usa para un subproceso
- String cadena; //Variable donde leemos la cadena
- int rebote; //Variable que nos dice el ancho en pφxeles de la cadena
- int ancho; //Variable donde almacenamos el ancho del applet
- int pos; //Posici≤n de la cadena
- int avance; //Avance en pφxeles de la cadena
- int delay; //Retardo de avance de la cadena
- Color colorFondo; //Color del fondo del Applet
- Color colorTexto; //Color del texto
-
- Image imagenVirtual; //Objeto imagen para hacer un doble buffer y evitar el parpadeo
- Graphics pantallaVirtual;
-
- //El mΘtodo init se ejecuta al iniciar el applet
- public void init () {
-
- //Leemos los parßmetros de entrada haciendo las conversiones necesarias
- colorFondo = new Color(Integer.parseInt(getParameter("colorFondo"),16));
- colorTexto = new Color(Integer.parseInt(getParameter("colorTexto"),16));
- avance = Integer.parseInt(getParameter ("avance"),16);
- delay = Integer.parseInt(getParameter ("delay"),16);
-
- cadena = getParameter ("cadena");
-
- ancho = this.getBounds().width;
- pos = ancho;
- rebote = -(fmetrics.stringWidth(cadena)); /* usamos el objeto fmetrics para obtener
- la longitud de la cadena*/
-
- //Creamos un objeto imagen del tama±o del applet
- imagenVirtual = createImage (size().width,size().height);
- //Creamos un objeto graphics para la imagen anterior
- pantallaVirtual = imagenVirtual.getGraphics();
- }
-
- //Este mΘtodo inicia un subproceso
- public void start () {
- if (runner == null) {
- runner = new Thread(this);
- runner.start ();
- }
- }
-
- //Este mΘtodo detiene un subproceso
- public void stop () {
- if (runner != null) {
- runner.stop ();
- runner = null;
- }
- }
-
- //Este mΘtodo es el subproceso
- public void run() {
- while (true) { //Con Θsta instrucci≤n creamos un bucle infinito
- repaint (); //Pintamos la pantalla
-
- /*Si la posici≤n es mayor que la longitud de la cadena retrocedemos
- sino es por que el texto entero se ha desplazado por el applet y
- entonces hay que empezar de nuevo*/
- if (pos > rebote) {pos -= avance;} else {pos = ancho;}
-
- //Intentamos el retardo y si no capturamos la excepeci≤n
- try {Thread.sleep (delay);}
- catch (InterruptedException e) {}
- }
- }
-
- //Este mΘtodo se ejecuta para actualizar el applet
- public void update (Graphics g) {
- paint (g);
- }
-
- //Este mΘtodo se usa para pintar en el applet
- public void paint (Graphics g) {
- //Pintamos el fondo y el texto en la pantalla virtual
- pantallaVirtual.setColor (colorFondo);
- pantallaVirtual.fillRect (0,0,this.size().width,this.size().height);
- pantallaVirtual.setFont (letra);
- pantallaVirtual.setColor (colorTexto);
- pantallaVirtual.drawString (cadena,pos,40);
-
- //Pasamos el buffer al grßfico del applet evitando asφ el parpadeo
- g.drawImage(imagenVirtual,0,0,this);
-
- }
-
- //Destruimos el objeto creado
- public void destroy () {
- pantallaVirtual.dispose ();
- }
- }
-