sábado, 9 de abril de 2016

027.- Vectores de Componentes y Eventos Desde Código - Java y NetBeans


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:


  1. Crea un proyecto en java.

  1. 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:



  1. 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):



  1. 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:



  1. 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.


  1. Ejecuta el programa para observar su aspecto hasta ahora:



  1. 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:



  1. 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.

  1. 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.

  1. 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