viernes, 13 de julio de 2012

2.1.2 Distintas clases de Eventos

Distintas clases de Eventos
El paquete java.awt.event define varios tipos de eventos que son generados por varios elementos de interfase de usuario. Entre los más comunes eventos utilizados están las siguientes clases:

Clase de Evento
Descripción
ActionEvent
Generado cuando un botón es seleccionado, una
lista (vista mas adelante) tiene un doble clic
o un menú es seleccionado
AdjustmentEvent
Generado cuando un barra de desplazamiento es manipulada
ComponentEvent
Generado cuando un componente es escondido, movido,
cambiado de tamaño, o se hace visible.
ItemEvent
Generado cuando una caja de chequeo (vista mas adelante)
es seleccionada con el ratón.

Distintas clases de Escuchadores
Los escuchadores son creados para implementar una o más de las interfases definidas por el paquete java.awt.event. Cuando un evento ocurre el evento fuente invoca el método apropiado definido por el escuchador y provee un objeto tipo evento como su argumento. Entre los más comunes estan:

Clase de Interfase
Descripción
ActionListener
Define un método para recibir eventos de acción
(ActionEvent)
AdjustmentListener
Define un método para recibir eventos de deslizadores
(AdjustmentEvent)
ComponentListener
Define cuatro método para reconocer cuando un componente
es escondido, movido, cambiado de tamaño o mostrado
(ComponentEvent).
ItemListener
Define un método para reconocer cuando el estado
De un campo cambia (ItemEvent).

Es importante que si queremos revisar los métodos que requerimos entremos a revisar en la documentación de Java (www.java.sun.com) las clases mostradas anteriormente para saber que métodos podemos utilizar para implementar el evento deseado.
A continuación mostramos algunos eventos diferentes a los de botón.
Eventos de Barra de Desplazamiento
En estos eventos hacemos uso de barras de desplazamiento para realizar alguna instrucción o grupo de instrucciones, y para esto es importante tomar eventos de la clase Scrollbar.  Los objetos de la clase Srollbar son escuchados a través de implementar una interfaz llamada AdjustmentListener, la cual utiliza el método adjustmentValueChanged, un método muy parecido al actionPerformed, pero trabaja sobre diferentes elementos de interfaz gráfica.
Para entender este applet debemos consultar la clase ScrollBar que se encuentra en el paquete java.awt. Esta clase tiene diferentes constructores que pueden ser utilizados para crear el objeto de la barra deslizadora, tomemos uno de los disponibles en la siguiente tabla que aparece en las clases de la API de Java:


Tomemos el tercer constructor, el cual es utilizado en este ejemplo, primero esta la orientación, que es un entero y en este caso utilizaremos uno definido en la misma clase Scrollbar.HORIZONTAL, después viene un valor que es el valor inicial con el que queremos que empiece la barra deslizadora, después esta el valor visible, si queremos que se vea definimos un 1, posteriormente el valor mínimo de la barra, y el máximo numero de números a tener.
Veamos el applet:
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
// <applet width="150" height="200" code="AppletEventos2"></applet>
public class AppletEventos2 extends Applet implements AdjustmentListener {
   Label l;
   Scrollbar s;
   TextField t;

   public AppletEventos2() {
      l = new Label("Valor de la barra de Scroll");
      t = new TextField(3);
      s = new Scrollbar(Scrollbar.HORIZONTAL, 0, 1, 0, 100);
      add(s);
      add(l);
      add(t);
      s.addAdjustmentListener(this);
   }

   public void adjustmentValueChanged(AdjustmentEvent ae) {
      int valor = s.getValue();
      t.setText(""+valor);
   }
}
Dicho applet muestra una barra de scroll que al ser deslizada muestra un valor en el campo texto, como aparece en seguida:
Utilizamos el método getValue de la clase Scrollbar para tomar el valor de la barra deslizadora en base al movimiento que el usuario hizo en ella.
Otro ejemplo que puede ilustrar mejor el uso de una barra deslizadora es el siguiente:
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
// <applet width="150" height="200" code="AppletEventos3"></applet>
public class AppletEventos3 extends Applet implements AdjustmentListener {
   Scrollbar s;
   int barra = 0;

   public AppletEventos3() {
      s = new Scrollbar(Scrollbar.HORIZONTAL, 0, 1, 0, 100);
      add(s);
      s.addAdjustmentListener(this);
   }

   public void paint(Graphics g) {
      g.drawRect(40, 80, 60, 100);
      g.fillRect(40, 80, 60, barra);
   }

   public void adjustmentValueChanged(AdjustmentEvent ae) {
      barra = s.getValue();
      repaint();
   }
}
En este ejemplo al mover la barra deslizadora se ve como va cambiando el llenado del rectángulo, utilizando para ello el método fillRect de la clase Graphics, el cual tiene como parámetros la coordenada en x, la coordenada en y, el ancho y el alto en pixeles, rellenando de color negro dependiendo del valor de la barra, es por esto que en el método paint() se utiliza la variable barra:

                                   
En el caso de este applet recurrimos a utilizar el método paint() para que se redibuje cada vez que se mueve la barra deslizadora, utilizando el metodo fillRect() rellenamos la parte del rectángulo. Es importante hacer notar que la variable barra se definió al inicio de la clase, para que cualquier método la pueda utilizar sin problemas.
Eventos del Ratón
Para implementar este tipo de eventos debemos implementar la interfaz MouseListener y MouseMotionListener.

A continuación se muestra un ejemplo de applet que los utiliza. Cada vez que el botón es presionado la palabra “Abajo” es desplegada en el lugar donde está el apuntador del ratón. Cada vez que el ratón es liberado, la palabra “Arriba” es mostrada. Si un botón es oprimido el mensaje “Ratón oprimido” es desplegado en la esquina superior izquierda del área del applet.

Cada vez que el ratón entra o sale del área del applet, un mensaje es desplegado. Cuando el ratón es arrastrado, un asterisco es mostrado, el cual es arrastrado con el apuntador del ratón. Es importante notar las dos variables mouseX y mouseY que guardan los lugares del ratón, cuando ocurre uno de los siguientes eventos del ratón: presionado, liberado, o arrastrado. Estas coordenadas son utilizadas dentro del método paint().

import java.awt.*;
import java.applet.*;
import java.awt.event.*;
// <applet width="150" height="200" code="MouseEvents"></applet>
public class MouseEvents extends Applet implements MouseListener,
MouseMotionListener {
String msg = "";
int mouseX = 0;
int mouseY = 0;
public void init() {
   addMouseListener(this);  // se añade el escuchador del ratón
//a este applet

addMouseMotionListener(this); // se añande el escuchador del movimiento
//  del raton a este applet

   }

public void mouseClicked(MouseEvent me) {
mouseX = 0;
mouseY = 10;
msg = "Ratón Oprimido";
repaint();
}
// cuando el ratón entra
public void mouseEntered(MouseEvent me) {
mouseX = 0;
mouseY = 10;
msg = "Ratón Entra";
repaint();
}
// cuando sale el ratón
public void mouseExited(MouseEvent me) {
mouseX = 0;
mouseY = 10;
msg = "Ratón Sale";
repaint();
}
// cuando se presiona el ratón
public void mousePressed(MouseEvent me) {
mouseX = me.getX(); // se toma el valor de la coordenada de x
mouseY = me.getY(); // se toma el valor de la coordenada de y
msg = "Abajo";
repaint();
}
// cuando se libera el ratón
public void mouseReleased(MouseEvent me) {
mouseX = me.getX();
mouseY = me.getY();
msg = "Arriba";
repaint();
}
// cuando se arrastra el ratón
public void mouseDragged(MouseEvent me) {
mouseX = me.getX();
mouseY = me.getY();
msg = "*";
showStatus("Moviendo el raton en " + mouseX + "," + mouseY);
repaint();
}
// moviendo el ratón
public void mouseMoved(MouseEvent me) {
showStatus("Moviendo el raton en " + mouseX + "," + mouseY);
}
// desplegando el mensaje en el applet
public void paint(Graphics g) {
g.drawString(msg, mouseX, mouseY);
}
}


Algunas vistas del applet se dan a continuación:

Vídeo de YouTube

No hay comentarios:

Publicar un comentario