Creación de eventos en Java

0
31104
Debo decir que, sin duda, mi lenguaje favorito es Java y disfruto mucho aprender cosas nuevas sobre su uso y las herramientas que tengo a mi disposición. La creación de eventos en Java es un tema que a mucha gente le gustaría dominar pero que no es tan fácil de comprender si somos principiantes o aficionados, como es mi caso.

Pero, ¿qué son los eventos en Java? 

La definición de evento, según el diccionario de la Real Academia Española dice:

«Suceso importante y programado, de índole social, académica, artística o deportiva.«

También encontramos la definición:

«Cosa que sucede.»

Nos quedamos con la segunda, ya que es lo que más se adapta a nuestro ámbito de la programación. Cosa que sucede.

Supongamos que tenemos un programa donde se hace necesario monitorear cierta condición en particular. Digamos que tenemos una variable y queremos determinar cuando sea que dicha variable sufra alguna modificación. O que queremos indicarle a un software en específico cuando sea que haya pasado una hora después del inicio de su ejecución. Lo que necesitaríamos es crear un evento que ejecute una acción cuando sea que algo suceda. Una cosa que sucede dispara un método en específico con las acciones que deseamos llevar a cabo ante dicha acción.

Cuando nosotros creamos una interface gráfica en Netbeans nos aparece una lista de eventos de los cuales podemos escoger. Por ejemplo, en un Frame tenemos la siguiente lista de eventos:

creacion de eventos en Java

 

Si nos adentramos en alguno de los menús desplegables, por ejemplo Mouse, veremos los eventos que se desencadenan cuando algo sucede con el Mouse.

creacion de eventos en Java

 

Vemos por ejemplo que el evento mouseClicked desencadenará una serie de instrucciones preestablecidas por nosotros cuando sea que se haga clic sobre el JFrame. Cuando utilizamos botones, al hacer click sobre ellos desencadenamos el evento ActionPerformed y de esa forma le damos funcionalidad a nuestras interfaces. Lo que haré en este post es mostrar al usuario como crear eventos más allá de aquellos que podemos utilizar con nuestras interfaces gráficas.

Preparando nuestro proyecto

Hace unos días publiqué un post sobre Listas multidimensionales en Java. Voy a tomar una clase que utilicé en dicho ejemplo y la voy a traer a este post.

Para explicar la creación de eventos en Java necesitaremos un proyecto para hacer pruebas. Vamos a Netbeans y creamos un proyecto al que vamos a llamar eventTest. Agregamos una clase a la que llamamos Empresa.

creacion de eventos en Java

 

En la clase Empresa, colocamos el siguiente código que podemos encontrar en el post de Listas multidimensionales.

La clase empresa contiene los getters y setters para el manejo de las variables que pertenecen a la clase. En nuestra clase principal vamos a crear una instancia de la clase Empresa.

Al crear la instancia necesitamos establecer los valores iniciales para el objeto que creamos, en este caso, uno que me representa a mi, Antony García, con información personal y de mi empresa.

Al guardar dicha información en un objeto, puedo llamarla cuando yo quiera o lo necesite. Hagamos un pequeño ensayo:

creacion de eventos en Java

 

Vemos que en la consola nos aparece la información que introduje como parámetros iniciales del objeto empresa. Si hacemos mención del objeto empresa, nos aparecerán los métodos disponibles para este objeto, que en este caso son los getters y setters que definimos en la clase Empresa.

creacion de eventos en Java

 

 

El evento que vamos a crear trabajará con los setters. Cuando sea que se modifique alguno de estos parámetros dispararemos un evento.

El EventObject

Debemos crear una clase que contenga todo lo relacionado a los eventos que deseamos crear. Esta clase debe extender a EventObject. 

En  nuestro proyecto creamos una clase que llamaremos changeEvent. El código de esta clase es el siguiente:

Nuestro proyecto ahora debe lucir así:

creacion de eventos en Java

 

La interfaz EventListener

Esta es la definición propia de los eventos. En ella se definen los métodos abstractos. Pero, ¿qué son métodos abstractos? Veamos.

En nuestro proyecto vamos a crear una clase que llamaremos changeEventListener. Dentro colocamos el siguiente código:

Estos son los métodos que se van a disparar cuando suceda algún cambio en alguno de los datos que recoge la clase Empresa. Por ejemplo, sin una vez establecemos el nombre y luego queremos cambiarlo, se va a disparar ejecutar el método onNameChange. Nuestro proyecto ahora debe lucir asi:

creacion de eventos en Java

Ahora en  nuestra clase principal podemos crear un objeto de la interface changeEventListener. Veamos lo que sucede:

creacion de eventos en JavaNos pide que implementemos los métodos abstractos. Al hacer clic en la sugerencia nos aparecen todos los métodos que ya declaramos en la interfaz changeEventListener.

creacion de eventos en Java

 

Ahora necesitamos establecer las acciones que se ejecutarán cuando se produzca cada evento.

Los cambios que quedan por hacer los hacemos en la clase Empresa que es donde se instalarán las instrucciones para disparar los eventos.

Creamos una variable donde guardaremos los listeners o «escuchadores». Estos son los manipuladores de los eventos. En el método Empresa de la clase empresa, colocamos lo siguiente:

creacion de eventos en Java

Lo que hemos hecho es crear un array que guarde los manejadores. Al iniciar la clase Empresa, iniciamos el ArrayList. Ahora hay que crear un método para agregar los manejadores al ArrayList.

Ahora creamos los métodos que van a disparar cada evento. A continuación los métodos «disparadores»:

Nuestro código debe lucir así:

creacion de eventos en Java

Nosotros queremos que cuando se produzca algún cambio en alguna variable, se dispare el evento. Así que cuando se invoque algún setter, ahí desencadenamos el método que corresponda.

creacion de eventos en Java

Al final, nuestra clase Empresa quedaría así:

Por último, en nuestra clase principal agregamos el manejador. También agregamos a propósito una instrucción de cambiar un el la información del usuario. En los métodos abstractos colocaré instrucciones para imprimir en la consola un mensaje cada vez que se haga un cambio utilizando los setters. Nuestra clase principal quedaría así:

Al correr nuestra aplicación, el resultado en  consola es el siguiente:

creacion de eventos en Java

Vemos que establecimos los valores iniciales, es decir, Antony García, con ID 1-234-567, edad 22 años y la empresa Panama Hitek. Al cambiar el nombre establecido en el objeto, el método abstracto onNameChange se ejecuta. La instrucción: imprimir el mensaje «Se cambió el nombre» en la consola. Lo mismo sucederá al cambiar cada dato.

Con esto podemos tener una idea muy general sobre lo que necesitamos para la creación de eventos en Java. Una clase que funcione como interfaz, una clase que extienda EventObject y establecer los métodos de disparo en la clase donde se produce los eventos que queremos disparar.

Los archivos de este proyecto pueden ser descargados gratuitamente desde nuestro repositorio en Github.

Esto es todo por ahora. Saludos.