Applets Java


En esta página:

  • Eventos

Eventos

La interacción con el usuario se obtiene en Java por medio de eventos, como ya fue explicado. Cuando sucede un evento que afecta al applet, la máquina virtual de Java ejecuta un método que se llama controlador de eventos. En principio esos métodos no tienen nada, por lo que deberemos sobreescribirlos en función de nuestras necesidades. Esos métodos son:

boolean mouseDown(Event, int, int)
Llamado cuando pulsamos un botón del ratón; los parámetros segundo y tercero contienen la posición del ratón cuando ocurrió el evento, mientras que el primero en un objeto que contiene información adicional sobre el mismo.
boolean mouseUp(Event, int, int)
Llamado cuando soltamos el botón del ratón después de haberlo pulsado.
boolean mouseMove (Event, int, int)
Llamado cuando movemos el ratón.
boolean mouseDrag (Event, int, int)
Llamado cuando movemos el ratón con un botón pulsado.
boolean mouseEnter (Event, int, int)
Llamado cuando el ratón entra en el applet.
boolean mouseExit (Event, int, int)
Llamado cuando el ratón abandona el applet.
boolean keyDown(Event,int)
Llamado cuando se pulsa una tecla. El argumento entero indica cuál.
boolean keyUp(Event, int)
Llamado cuando se suelta una tecla.

Como ejemplo, podemos hacer un ojo que sigue al ratón:

Ojo.java
/**
 * Applet Ojo
 *
 * <APPLET CODE="Ojo.class" WIDTH="300" HEIGHT="300">
 *   <PARAM NAME="Cadena" VALUE="Esto sí que es chulo">
 * </APPLET>
 */

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

public class Ojo extends Applet {
  int ancho, alto, anchoOjo, altoOjo, anchoPupila, altoPupila;
  int xOjo, yOjo, xPupila, yPupila, xActual, yActual;
  Image buffer;
  Graphics pantallaVirtual;
  public void init() {
    ancho = getBounds().width;
    alto = getBounds().height;
    anchoOjo = ancho / 2;
    altoOjo = alto / 2;
    anchoPupila = anchoOjo / 2;
    altoPupila = altoOjo / 2;
    xOjo = anchoOjo - anchoPupila;
    yOjo = altoOjo - altoPupila;
    xPupila = xOjo + anchoPupila/2;
    yPupila = yOjo + altoPupila/2;
    xActual = xPupila;
    yActual = yPupila;
    buffer = createImage(ancho, alto);
    pantallaVirtual = buffer.getGraphics();
  }
  public void paint(Graphics g) {
    g.setColor(Color.yellow);
    g.fillOval(xOjo, yOjo, anchoOjo, altoOjo);
    g.setColor(Color.black);
    g.fillOval(xActual, yActual, anchoPupila, altoPupila);
  }
  public void update(Graphics g) {
    Color colorTemporal = pantallaVirtual.getColor();
    pantallaVirtual.setColor(Color.white);
    pantallaVirtual.fillRect(0, 0, ancho, alto);
    pantallaVirtual.setColor(colorTemporal);
    paint(pantallaVirtual);
    g.drawImage(buffer, 0, 0, this);
  }
  public boolean mouseMove(Event evt, int x, int y) {
    xActual = (xPupila*21 + x*8)/32;
    yActual = (yPupila*21 + y*8)/32;
    repaint();
    return true;
  }
}

El controlador de evento mouseMove se ejecuta cuando el ratón se mueve por encima del applet. Es en ese momento cuando se modifica la situación de la pupila del ojo, siguiendo al puntero del ratón. La "formula", la verdad, está hallada a ojo, cosa que me pareció muy natural en este caso. Además, hacerlo bien requeriría que nos metieramos en asuntos trigonométricos, y son asuntos estos muy peliagudos.