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:
boton.addActionListener(ActionListener nombre_de_actionListener)
A continuación se muestran los aspectos más destacados del código en 4 versiones diferentes:
boton.addActionListener(this);
//
public void actionPerformed(ActionEvent e) {
... código ... ;
}
boton.addActionListener(new ClaseClicEnBoton());
//
class ClaseClicEnBoton implements ActionListener {
public void actionPerformed(ActionEvent e) {
... código ... ;
}
}
boton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
clicEnBoton(e); }
});
private void clicEnBoton(ActionEvent e) {
... código ... ;
}
boton1.setActionCommand ("nombre_ActionCommand1");
boton2.setActionCommand ("nombre_ActionCommand2");
posteriormente se emplea una estructura condicional para elegir la acción dependiendo
del botón origen del evento:public void actionPerformed(ActionEvent e) {
//si se ha pulsado en el botón 1 (si ActionCommand es nombre_ActionCommand1)
if ("nombre_ActionCommand1".equals(e.getActionCommand())) {
... código ... ; }
//si se ha pulsado en el botón 2 (si ActionCommand es nombre_ActionCommand2)
else if ("nombre_ActionCommand2".equals(e.getActionCommand())) {
... código ... ; }
}
Código 1: la clase principal implementa ActionListener
boton1.addActionListener(this);
// LO QUE SUCEDE AL PULSAR EL BOTÓN
public void actionPerformed(ActionEvent e) {
... código ... ;
}
Código 2: la clase principal no implementa ActionListener
boton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
clicEnBoton(e); }
});
private void clicEnBoton(ActionEvent evt) {
... código ... ;
}
Código 3: la clase principal no implementa ActionListener
boton.addActionListener(new ClaseClicEnBoton());
Código 4: detectar qué botón ha generado el evento
boton1.setActionCommand ("nombre_ActionCommand1");
boton2.setActionCommand ("nombre_ActionCommand2");
boton1.addActionListener(this); boton2.addActionListener(this);
Código común
Aplicación de ejemplo
Imagen del programa en funcionamiento

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.