Asignación
de eventos a los elementos de un vector de componentes:
En Java se pueden crear vectores de componentes, como ya se vio en el
post anterior. Estos vectores pueden contener un grupo de etiquetas, cuadros de
texto, botones, etc.
Gracias a los vectores de componentes se pueden crear rápidamente por
código estos componentes y trabajar sobre ellos sin tener que usar muchas
líneas de código.
En esta hoja se verá cómo se pueden asignar eventos a los componentes de
un vector.
Ejercicio:
- Crea un proyecto
en java.
- Empecemos
definiendo desde código las características de la ventana. Crearemos el
método crearVentana, y lo llamaremos desde el método constructor
de la clase:
- Vamos a situar
en la ventana 5 botones, y para ello usaremos un vector de botones, que
tendremos que declarar en la zona de variables globales (propiedades de la clase):
- Dentro del método
crearVentana
construiremos el vector y construiremos cada uno de los botones que contiene,
asignando las distintas características de cada uno. Debes añadir el
siguiente código dentro del método crearVentana:
- En el código
anterior se crea un vector de cadenas (String) con el texto de cada botón.
Luego se construye el vector de botones, asignándole
5 botones.
A continuación, usando un bucle for, construimos
cada botón del vector, le asignamos el texto correspondiente, le asignamos su
posición y su tamaño, y lo colocamos en el panel de contenido de la ventana.
- Ejecuta el
programa para observar su aspecto hasta ahora:
- Ahora,
interesaría asignar un evento actionPerformed a cada botón.
Esto se hará aprovechando el que todos los botones pertenezcan a un
vector, usando un bucle for. Añade el siguiente código al final del método crearVentana:
Este código asigna a cada botón un evento actionPerformed
que hace una llamada a un método al que he llamado botonActionPerformed. (Esta llamada da error porque aún no
ha sido programado dicho evento. Esto se hará a continuación.)
Hay que tener en cuenta que cuando se pulse
cualquiera de los botones, se ejecutará el método botonActionPerformed.
Programa este procedimiento (fuera de crearVentana, por supuesto) de la
siguiente forma:
- Ejecuta el
programa y observa el resultado. Cuando pulsas cualquiera de los botones,
se ejecuta la respuesta al evento y esta lo que hace es mostrar un mensaje
a través de un JOptionPane donde aparece el texto “Has pulsado uno de los
botones.”.
El método botonActionPerformed sirve como respuesta
para todos los botones. El problema que plantea esto es, ¿cómo saber qué botón
se ha pulsado? Es aquí donde entra en funcionamiento el parámetro ae (ActionEvent) que suelen llevar todos los eventos.
- Modifica el método
botonActionPerformed
de forma que quede así:
Este código resulta muy interesante. El parámetro ae
tiene siempre un método llamado getSource que devuelve el componente
de la ventana sobre el que ha sucedido el evento. De esta manera obtenemos el
botón que ha sido pulsado. (Observa que es necesario hacer un cast)
Aprovechamos esto para introducir el botón en una variable auxiliar que hemos
llamado botonPulsado.
Luego solo hay que usar la variable botonPulsado
como un botón normal y corriente. Por ejemplo, la usamos en el JOptionPane mostrando el texto que
contiene el botón pulsado con el método getText.
- Ejecuta el programa
y observa el resultado, por ejemplo al pulsar el botón Aplicar se muestra
lo siguiente:
CONCLUSIONES:
Se
pueden asignar eventos a los elementos de un vector a través de un bucle for
que recorra los distintos elementos del vector y le asigne el evento o eventos
necesarios.
Cuando
se asigna un mismo método de respuesta a eventos de varios componentes, es
necesario usar el parámetro ae (ActionEvent) junto con el método getSource para averiguar el componente
sobre el que ha sucedido el evento.
La forma
general de acceder al elemento sobre el que sucedió el evento es la siguiente:
TipoComponente var = (TipoComponente) ae.getSource();
La
variable var contendrá
el componente activado.
No hay comentarios.:
Publicar un comentario