viernes, 13 de julio de 2012

2.1.1 Eventos de botón

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:
Donde lo mas importante aquí es entender el uso del método getSource() y el objeto ae perteneciente a la clase ActionEvent, que es el que nos esta pasando el evento de que se trata, la instrucción  
      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