En esta unidad entenderás como manejar los eventos de
un applet para cuando el usuario desee utilizar algun elemento que
permita que el applet realice acciones, como un botón, un deslizador de
barra, etc.
Evento
Un
evento se refiere a alguna acción que puede ser realizada por el
usuario para que el applet realice alguna serie de instrucciones.
Ente algunos eventos dentro de un applet tenemos:
- oprimir en un botón específico
- mover una barra de desplazamiento
- oprimir una tecla específica
Cuando
un applet esta ejecutándose, éste puede estar esperando que el
usuario active alguna secuencia de instrucciones mediante la
selección de algún elemento de interfaz gráfica definida para
esto, como lo hemos hecho anteriormente con el objeto de la clase
Button.
Cuando
creamos un objeto de interfaz gráfica que nos servirá para que el
usuario indique alguna acción, es importante definirle a este objeto
que será escuchado por la clase específica que se encarga de
revisar si hay algún evento que ha sido realizado.
Escuchadores
de eventos (Listeners)
Un
Escuchador (Listener) es un objeto que es notificado cuando un evento
ocurre. Este tiene dos requerimientos: 1) Debió haber sido
registrado con una o más fuentes que reciben notificaciones sobre
tipos de eventos específicos, y 2) Debe implementar métodos que
reciban y procesen éstas notificaciones.
Los
métodos que reciben y procesan estas notificaciones están definidos
en un grupo de interfaces encontradas en java.awt.event. Por ejemplo
la clase MouseMotionListener define dos métodos que reciben
notificaciones cuando el ratón es arrastrado o movido. Algún objeto
puede recibir y procesar uno o ambos de estos eventos si éste
provee una implementación de esta interfase.
Eventos
de Botón
Analicemos
lo que se hace para manejar más de un botón, usemos el applet
utilizado anteriormente para dar la suma de todos los números desde
el 1 hasta el N:
Supongamos
que ahora queremos tener un botón que limpie los valores de los
campos, para volver a dar nuevos valores.
El
applet quedaría muy parecido al anterior hecho, solo que ahora en el
método action Performed debemos revisar cual fue el botón que se
seleccionó, y esto será a través de la instrucción de decisión
IF, y el método getSource() que es tomado de la clase ActionEvent,
que es el parámetro que nos pasa el método actionPerformed. Dentro
de este parámetro es donde se guarda la información sobre cual es
el elemento gráfico que fue seleccionado.
Es
importante no olvidar que todos las clases para poder usar eventos se
toman utilizando import java.awt.event.*;
El
applet quedaría como el siguiente:
import
java.awt.*;
import
java.applet.*;
import
java.awt.event.*;
//
<applet width="150" height="200"
code="AppletEventos1"></applet>
public
class AppletEventos1 extends Applet implements ActionListener {
Label
l1, l2;
TextField
t1,t2;
Button
b1,b2;
public
AppletEventos1() {
l1 =
new Label("Numero");
t1 = new TextField(8);
l2 = new Label("Suma");
t2 = new TextField(8);
b1 = new
Button("Suma");
b2 = new
Button("Limpia");
add(l1);
add(t1);
add(b1);
add(b2);
add(l2);
add(t2);
b1.
addActionListener(this);
b2.
addActionListener(this);
}
public
void actionPerformed(ActionEvent ae) {
if
(ae.getSource() == b1) {
int n =
Integer.parseInt(t1.getText());
int
suma = 0;
for (int i = 1; i<=
n; i++) {
suma += i;
}
t2.setText(""
+ suma);
}
if (ae.getSource() ==
b2) {
t1.setText("");
t2.setText("");
}
}
}
La
ejecución del applet quedaría como el siguiente:
if (ae.getSource() ==
b1) {
Lo
que revisa es si el evento que fue el tomado corresponde al objeto
del botón b1, si esto es cierto, entonces se realizan las
intrucciones dentro del if, de otra manera se salta a continuar con
el siguiente if.
La
misma acción la podemos realizar, pero utilizando el método
getActionCommand, pero aqui el cambio sería tomar el String que
aparece en el elemento del botón, no el nombre del objeto botón, la
instrucción pudiera ser :
if
(ae.getActionCommand() == "Suma")
Ambas
maneras son utilizadas para revisar cual fue el botón seleccionado.
De
tal manera que el applet podría quedar como el siguiente y
funcionaría igual:
import
java.awt.*;
import
java.applet.*;
import
java.awt.event.*;
//
<applet width="150" height="200"
code="AppletEventos1"></applet>
public
class AppletEventos1 extends Applet implements ActionListener {
Label
l1, l2;
TextField
t1,t2;
Button
b1,b2;
public
AppletEventos1() {
l1 = new
Label("Numero");
t1 = new TextField(8);
l2 = new Label("Suma");
t2 = new TextField(8);
b1 = new
Button("Suma");
b2 = new
Button("Limpia");
add(l1);
add(t1);
add(b1);
add(b2);
add(l2);
add(t2);
b1.
addActionListener(this);
b2.
addActionListener(this);
}
public
void actionPerformed(ActionEvent ae) {
if
(ae.getActionCommand() == "Suma") {
int n =
Integer.parseInt(t1.getText());
int suma = 0;
for (int i = 1; i<=
n; i++) {
suma += i;
}
t2.setText(""
+ suma);
}
if (ae.
getActionCommand() == "Limpia") {
t1.setText("");
t2.setText("");
}
}
}
Otro
EJEMPLO
Ahora
mostramos un ejemplo en el que utilizamos dos botones, un botón para
dibujar círculos en el applet al azar (empezando más debajo de la
coordenada 60, 80), el otro botón es para limpiar el applet.
import
java.awt.*;
import
java.applet.*;
import
java.awt.event.*;
//
<applet width="150" height="200"
code="AppletCirculos"></applet>
public
class AppletCirculos extends Applet implements ActionListener {
Label
l1;
TextField
t1;
Button
b1,b2;
boolean
dibuja = false; //
se inicializa dibuja en falso para no dibujar
public
AppletCirculos() {
l1
= new Label("Circulos");
t1
= new TextField(8);
b1
= new Button("Dibuja");
b2
= new Button("Limpia");
add(l1);
add(t1);
add(b1);
add(b2);
b1.
addActionListener(this);
b2.
addActionListener(this);
}
public
void actionPerformed(ActionEvent ae) {
if
(ae.getSource() == b1) {
dibuja
= true; //
si el usuario selecciona dibujar se pone verdadero
}
if
(ae.getSource() == b2) {
dibuja
= false; //
si el usuario selecciona limpiar se pone en falso
}
repaint();
}
public
void paint(Graphics g) {
if (dibuja) { //
si dibuja es verdadero se dibuja
g.setColor(Color.red); //
se cambia a rojo el color de dibujo
int circulos = Integer.parseInt(t1.getText()); //
se toma el numero del texto
for
(int i = 1; i <= circulos ; i++) { //
ciclo de circulos
int
x1 = (int) (Math.random()*100)+60;
int y1 = (int) (Math.random()*100)+80;
g.drawOval(x1,y1, 50, 50); //
se dibuja un circulo en
//
una posición al azar
}
}
else
{ //
si dibuja es falso se limpia el applet
g.setColor(Color.white);
g.fillRect(0,0,200,200);
}
}
}
Algunos
ejemplos de la vista del applet son:
No hay comentarios:
Publicar un comentario