Java Swing: Permitir hacer Click en las JLabel

Cuando cursé CPM (Comunicación Persona Máquina) en mi primer año de carrera, se nos explicaron muchas cosas acerca de la programación de interfaces de usuario en Java mediante Swing y también líneas generales para desarrollarlas en cualquier otro lenguaje.Una de las cosas que nos dijeron es que las etiquetas estaban para mostrar información y no para interactuar con el usuario. Estoy de acuerdo en que, en líneas generales, eso es cierto, pero hay casos en los que está justificado hacer que una etiqueta se comporte como un botón. Recuerdo que haciendo un bingo, optamos por mostrar las imágenes de los números del cartón dentro de etiquetas… y por tanto, la gente debería poder hacer clic para “tachar” ese número.

La forma de hacer clickcables las JLabel, ya que no disponen de ActionPerformed, consiste en añadir a la etiqueta un MouseListener y programar su evento mouseClicked. He desarrollado una pequeña demo para ilustrar su uso:En este caso el código de la etiqueta interactiva sería así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private JLabel getLabelTitulo() {
	if (labelTitulo == null) {
		labelTitulo = new JLabel();
		labelTitulo.setText("Soy una etiqueta clicable: ");
		labelTitulo.addMouseListener(new MouseListener() {
			public void mouseClicked(MouseEvent arg0) {
				campoClickado.setText("La etiqueta ha sido clickeada");
				areaTexto.setVisible(false);
			}
			public void mouseEntered(MouseEvent arg0) {
				areaTexto.setText("El ratón se ha situado sobre la etiqueta");
			}
			public void mouseExited(MouseEvent arg0) {
				areaTexto.setText(mensageAreaTexto);
			}
			public void mousePressed(MouseEvent arg0) {}
			public void mouseReleased(MouseEvent arg0) {}
		});
	}
	return labelTitulo;
}

Como veis no tiene ningún misterio, aunque obliga a redefinir todos los métodos, aunque solo vayamos a usar el mouseClicked. Para la demo he usado también el mouseEntered (se activa cuando el ratón se sitúa sobre la etiqueta) y el mouseExited (se activa cuando el ratón sale de la etiqueta). Si no los hubiera necesitado los habría dejado en blanco, tal y como he hecho con mousePressed y mouseReleased. ¿Conoces otra forma de hacerlo?

About the Author

Me llamo Pablo Carballude González, soy graduado en computación con master en HCI y Seguridad Informática. Actualmente trabajo para Amazon en Seattle como Software Developer Engineer. Soy de esas personas que no saben si los textos autobiográficos deben ser en primera o tercera persona. Lo intenté en segunda, pero no le entendí nada :P