Java para programadores (5.1). El applet mas basico

Los Applets Java son pequeños programas que pueden funcionar en los navegadores de paginas Web. La verdad es que hay muy pocas palabras acertadas en la definición que he dado. Un applet no es un programa completo. No tiene porqué ser pequeño. Y mientras que muchos applet se crean para ser usados en paginas Web, también hay otras formas de usarlos, y muy buenas razones para hacerlo. La definición correcta, debería ser que un applet es un objeto perteneciente a la clase Java.applet.Applet o a una de sus subclases.

La clase Applet, definida en el package Java.applet, en realidad  solo se emplea para hacer subclases. Un objeto tipo Applet tiene algunos comportamientos básicos, pero no son en absoluto aprovechables. Para crear un applet útil el programador debe definirlo como una subclase  de la clase Applet.En el applet hay definidos un cierto número de métodos que no hacen nada. El programador, debe redefinir algunos de estos métodos para conseguir que hagan algo.

Un applet es una parte intrínseca de la interface gráfica del usuario. Es un tipo de componente gráfico que puede ser presentado en una ventana (que puede pertenecer a un navegador Web o a otro programa cualquiera). Cuando presentamos en la ventana un applet, este es una figura rectangular que a su vez contienen otros componentes tales como botones y cajas de texto.

Podemos presentar también otros elementos gráficos como imágenes, rectángulos o líneas. Y puede responder a ciertos eventos, como el generado cuando el usuario hace clic con el ratón en el área del applet. El comportamiento de todos los applets esta determinado por métodos; qué componentes   contienen, qué gráficos se presentan, y a que eventos pueden responder. Estos métodos están incluidos en la clase Applet pero el programador debe redefinirlos en su subclase para conseguir un autentico applet con algún comportamiento interesante.

Anteriormente,    cuando estudiaba los programas Java, se encontraba continuamente con la rutina main() que nunca iba a ser llamada por el programador. La rutina main() la llamaba “el sistema” cuando quería ejecutar el programa. El programador escribía en la rutina main) lo que debía pasar cuando el sistema ejecutara el programa. Un applet no necesita rutina main() dado que no es un programa. Sin embargo, hay algunos métodos en un applet similares a la rutina main()en que también van a ser llamados por el sistema, y el trabajo del programador es decir que debe pasar como respuesta a esas llamadas del sistema.


Uno de los métodos mas importantes del applet es el paint(). El trabajo de este método es dibujar los componentes gráficos que se presentan en el applet –recuerde que es, justamente, un área rectangular de la ventana. El la clase Applet el método paint() no dibuja absolutamente nada, por lo tanto, este será uno de los métodos que el programador deberá redefinir en la subclase. La definición de este método tiene la siguiente forma:

          public void paint(Graphics g) {
              // dibujar alguna cosa
          }

El método debe ser publico porque puede ser llamado desde fuera de la clase, por el sistema. El parámetro g del tipo Graphics lo facilita el sistema cuando realiza la llamada al método paint(). En Java, todo lo que se quiera dibujar en pantalla, debe realizarse con los métodos facilitados por el objeto Graphics. Hay una gran cantidad de estos métodos. Anteriormente hemos estado viendo algunos ejemplos de forma aislada, y presentaremos los gráficos con mucho mas detalle en la Sección 4

Como ejemplo, tomemos el camino tradicional y veamos el applet que presenta la string “Hola Mundo!”. Deberá usar el método paint() para presentar la string:

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

         public class HelloWorldApplet extends Applet {

            // Este applet presenta unicamente la string Hola Mundo!

            public void paint(Graphics g) {
               g.drawString("Hola Mundo!", 10, 30);
            }

         }  // fin de la clase HelloWorldApplet

El método drawString(), definido en la clase Graphics, es el que realmente realiza el dibujo. Los parámetros de este método especifican la string que se quiere presentar y la posición dentro del applet en donde se quiere poner. Mas adelante volveremos a ello. Dese cuenta que hemos importado el paquete java.applet que incluye la clase Applet y el java.awt que incluye la clase Graphics y algunas otras clases relacionadas con la interface gráfica del usuario. La mayoría de los applets emplean estos dos paquetes.

Ahora bien: un applet es un objeto, no una clase. Hasta ahora, nosotros solo hemos definido clases. En que momento hacemos que el applet se transforme en objeto?. Naturalmente que es posible el crearlo como un objeto:

Applet hw = new HelloWorldApplet();

Estas posibilidades, se pueden emplear a menudo, cuando está escribiendo un programa y quiere añadir un applet a la ventana que ha creado.Normalmente, sin embargo, los objetos applet los crea el sistema. Por ejemplo, cuando aparece un applet en una pagina de su navegador Web, es porque el navegador ha creado el objeto applet. Es por esto que la subclase de Applet siempre debe estar declarada como publica. De otra manera, el sistema no podría tener acceso a la clase, y le seria imposible el poder crear un applet basado en esa clase.

Para que un applet aparezca en una página Web, es necesario que el documento que se esta presentando en ese momento, especifique el nombre del applet y su tamaño. Esta especificación, como el resto del documento, esta escrito en lenguaje HTML.Discutiremos con mas detalle el HTML en la Sección 3. Aquí tenemos algo de código HTML que podemos emplear para displayar el applet HelloWorld:

      <center>
      <applet code="HelloWorldApplet.class" width=250 height=50>
         <p><font color="#E70000">Lo siento, pero su navegador<br>
            no soporta Java.</font></p>
      </applet>
      </center>

Y aquí esta lo que presenta este código:

Lo siento, pero su navegador
no soporta Java

Si el navegador que esta utilizando no soporta Java, o si ha desconectado el soporte para Java, entonces vera el mensaje “Lo siento, pero su navegador no soporta Java”. De otra forma, deberá ver el mensaje “Hola Mundo!”. El mensaje se presenta en un rectángulo de 250 pixeles de ancho por 50 pixeles de alto. Puede que no consiga ver el rectángulo , pero el applet esta dentro del rectángulo.


En este applet el  sistema llama al método paint() en el momento en que    se crea el applet. También puede ser llamado en otros momentos. De hecho se llama cada vez que el contenido del applet debe ser redibujado. Esto puede pasar cuando el applet  se presenta después de que haya quedado oculto por otra ventana.

También acostumbra a pasar cuando desplaza la ventana de su navegador y con él desplaza la ventana del applet. Esta forma de controlar el método paint() desde el exterior, le permite que dibujar algo con un applet sea tan sencillo como preparar las instrucciones de dibujo, y quedarse tranquilamente esperando que se llame a la rutina.

Si el contenido de un applet puede cambiar, entonces deberá utilizar una instancia de la variable para controlar el contenido, y el método paint() deberá emplear la información de esa instancia para poder reconstruir adecuadamente el contenido. De otra manera, cuando el usuario desplaze el applet fuera de su visión y lo vuelva a visualizar, lo que dibuje, puede no ser lo que se espera.

A continuación, tenemos un ejemplo muy sencillo, vamos a modificar el applet HelloWorld para que cada vez que el usuario pulse el botón de su ratón en el applet, el mensaje cambie de color. Puesto que queremos que el mensaje se vuelva a presentar con el color correcto cuando se vuelva a llamar al método paint(), necesitaremos una variable instanciable para controlar el color actual. Para hacer esto, solo deberemos usar una variable entera  a la que llamaremos currentColor y que puede tomar los valores 0,1, 2, o 3 para indicar los colores negro, rojo, azul, y verde. El método paint puede quedar así:

public void paint(Graphics g) {
    switch (currentColor) { //seleccionar el color correcto 
                //para el dibujo
        case 0:
            g.setColor(Color.black); // el color sera por defecto
        break; // si no se especifica el negro
    case 1: 
        g.setColor(Color.red);
        break;
        case 2:
        g.setColor(Color.blue);
        break;
    case 3:
            g.setColor(Color.green);
        break;
    }
    g.drawString("Hola Mundo!", 10, 30);
}

Cada vez que se tenga que redibujar el applet, se llamará a este método y siempre dibujara la string en el color que este seleccionado en cada momento.

Ahora, tenemos que conseguir que cambie el valor de currentColor cada vez que el usuario haga clic en el applet. Cuando pase esto, el sistema llamara a una rutina llamada mouseDown(). Esta es otra de esas rutinas que normalmente no hacen nada, pero que puede ser redefinida para que realice una respuesta especifica a la pulsación del botón del ratón. En este caso, necesitamos que cambie el valor de currentColor y ver como el mensaje se dibuja con el nuevo color. La forma correcta de hacer esto, es llamar al método repaint(). Este método, realmente no realiza un nuevo dibujo, sino que se limita a comunicar al sistema que el applet necesita ser repintado. El sistema llama entonces al método paint() que justamente lo que queríamos. Entonces, deberemos hacer:

 public boolean mouseDown(Event evt, int x, int y) {
      currentColor++;    // cambia el numero de color actual
      if (currentColor > 3)   // si es demasiado grande
          currentColor = 0;    //    lo pone a cero
      repaint();    // pide al sistema que redibuje la pantalla
      return true;  // devuelve control al sistema después que 
                   // el evento mouseDown ha sido procesado
  }

De momento, puede ignorar los parámetros de mouseDown(), aportan información acerca de la pulsación del botón del ratón, pero ahora solo necesitamos saber que se ha producido el clic. El devolver un valor boleano true en típico de las subrutinas que procesan eventos. El devolver ese valor indica si el evento necesitara  mas procesos o no. Como veremos mas adelante, para algunos objetos les es posible manejar con la misma rutina, varios eventos.

Ahora ya podemos ver el nuevo applet de forma conjunta:

// EL Applet basico : Hola Mundo

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

public class HelloWorldApplet1 extends Applet {

    // Un applet que solo presenta Hola Mundo!!
    // y que cambia de color cada vez que se pulsa
    // con el ratón

   private int currentColor = 1;   //inicializamos el valor
                   // del color.
   public void paint(Graphics g) {
      switch (currentColor) {  //seleccionar el color
                               // correcto para el dibujo
     case 0:
       g.setColor(Color.black);    // el color  por defecto
           break;                      // si no se especifica 
         case 1:  
           g.setColor(Color.red);
           break;
     case 2:
           g.setColor(Color.blue);
           break;
         case 3:
       g.setColor(Color.green);
           break;
    }
        g.drawString("Hola Mundo!", 10, 30);
   }
   public boolean mouseDown(Event evt, int x, int y) {
        currentColor++;    // cambia el numero de color actual
        if (currentColor > 3)   // si es demasiado grande
           currentColor = 0;    //    lo pone a cero
        repaint();    // pide al sistema que redibuje la pantalla
        return true;  // devuelve control al sistema después que 
                     // el evento mouseDown ha sido procesado
  }

}  // fin de la clase HelloWorldApplet

Y aquí lo tenemos. Pruebe de pulsar con el ratón sobre el applet para que cambie de color

Acerca de Miguel Garcia

Programador, Desarrollador web, Formador en distintas areas de informatica y director de equipos multidisciplinares.
Esta entrada fue publicada en Formacion, Java y etiquetada , , . Guarda el enlace permanente.

2 respuestas a Java para programadores (5.1). El applet mas basico

  1. Pingback: Java para programadores (5). Applets, HTML y el webRecursos para formacion

  2. Pingback: Java para programadores (5). Applets, HTML y el webRecursos para formacion

Deja un comentario