Realizar una acción al pulsar un botón

Las aplicaciones han de responder a las acciones que realiza el usuario, por ejemplo: cerrar la ventana al pulsar un botón. Es necesario poder detectar las acciones de usuario y convertirlas en acciones de programa. Java dispone de varias formas de implementar este funcionamiento. En este ejercicio se mostrarán algunas de ellas. Todas se basan en este mecanismo básico:

Las Interfaces son clases "prefabricadas" con propósitos definidos. Cada Interface contiene declaraciones de métodos (nombre del método, lista de argumentos y tipo de retorno) pero estos métodos no están implementados (carecen de cuerpo); todos los métodos de las Interfaces son public. Las Interfaces también pueden declarar constantes (public final static).

En Java no existe la herencia múltiple como tal: una clase no puede heredar (extends) de más de una clase. Pero una clase puede implementar más de una Interface, ésta es una manera de tener herencia múltiple. En la clase que implementa una Interface han de ser sobrescritos (override) todos los métodos declarados en la Interface. La clase que implementa una Interface es la Interface.

ActionListener es una Interface del grupo de los Listeners (escuchadores). ActionListener tiene un sólo método: void actionPerformed(ActionEvent e). ActionListener se usa para detectar y manejar eventos de acción (ActionEvent): los que tienen lugar cuando se produce una acción sobre un elemento del programa.

Un evento ActionEvent se produce:

Los distintos elementos del programa (botones, etc...) están  vigilados por Listeners que detectan las acciones que tienen lugar sobre el elemento vigilado. Cuando ActionListener detecta una acción (por ejemplo: pulsar sobre un botón) se genera un evento de acción (ActionEvent) en el elemento (botón). Los ActionEvent invocan el método actionPerformed(ActionEvent e) que realiza las acciones programadas ante ese evento. La clase que implementa ActionListener ha de importar el paquete java.awt.event.*.

De manera que cuando el usuario pulsa un botón:

  1. el botón sobre el que se produce una acción y genera un evento (event source, este dato se puede obtener con el método getSource) ha de estar previamente registrado con algún objeto que gestione el evento (ActionListener en este caso) mediante el método:
    boton.addActionListener(ActionListener nombre_de_actionListener)
  2. el botón genera un ActionEvent (clase del paquete java.awt.event)
     
  3. ActionEvent invoca al método actionPerformed que realiza las acciones programadas
     
  4. si la clase implementa ActionListener, el método public void actionPerformed(ActionEvent e) ha de ser sobreescrito (override)

A continuación se muestran los aspectos más destacados del código en 4 versiones diferentes:

Código 1: la clase principal implementa ActionListener

Código 2: la clase principal no implementa ActionListener

Código 3: la clase principal no implementa ActionListener

Código 4: detectar qué botón ha generado el evento

Código común

Aplicación de ejemplo

Imagen del programa en funcionamiento

Imagen del programa

Se trata de una ventana con una etiqueta para mostrar un número y 4 botones de comando; cada botón,al ser pulsado, implementa la acción de forma diferente, según lo referido más arriba; todos ellos suman una cifra al número mostrado.

Código Java.