[JAVA] Cambiar el icono de un JLabel

En Java, cuando se crea la interfaz gráfica de una aplicaión, generalmente se utilizan los JLabel para incluir imágenes. Para ello se modifica la propiedad icon, que define la imagen que va a contener nuestro JLabel. Cuando utilizamos un IDE como NetBeans es sencillo asignar una imagen como icono directamente desde el editor visual, pero y si queremos que esta imagen cambie al pulsar un botón? O simplemente queremos definirla manualmente?

Como siempre, en programación hay muchas maneras de hacer las cosas, pero solo os voy a explicar la forma más versátil, pues de nada valdría explicaros una forma que solo funcione en proyectos con cierta estructura. El código es sencillo, tal que así:

 

String dir = “/img/icono.png”; 
URL url = getClass().getResource(dir);
ImageIcon icono = new ImageIcon(url);
JLabelIcono.setIcon(icono);

 

Explicación paso a paso:

– En la primera línea creamos un string, que va a contener la dirección de nuestro icono. La dirección debería tener esta estructura: “/package_que contiene_el_icono/nombre_icono.formato”. Es necesario que el primer carácter del String sea “/”, más adelante se explica.

– En la segunda línea creamos un objeto URL que va a contener la dirección completa de nuestro icono. Para ello utilizamos getClass(), que nos devuelve la clase sobre la que estamos trabajando. Y sobre esta clase aplicamos la función getResource(dir). En principio, la función getResource() nos devuelve la dirección URL de la carpeta que contiene el package de la clase sobre la que se ejecuta, pero en este caso hemos añadimos un argumento (dir), lo que hace que nos devuelva la dirección añadiendole al final el contenido del String.

Para entendernos, si la URL que nos devuelve la función es:
“C/proyecto/resource”
cuando le añadimos un String como argumento quedaría así:
“C/proyecto/resource”+String

Por ello es necesario que el primer carácter de nuestro String sea “/”. De no hacerlo no encontrará el icono.

– En la tercera línea creamos un objeto del tipo ImageIcon, que contendrá nuestro icono. Para ello llamamos al constructor de la clase, ImageIcon(URL). Si no utilizamos el argumento del tipo URL, sustituyéndolo por nuestra variable url , no asignaría ninguna imagen como icono.

– Por último, en la cuarta línea, utilizamos la función setIcon(Icon) sobre nuestro JLabel, para así modificar su icono.

 

Notas:

– La función getClass() no puede ser llamada desde una función static.

– Podemos simplificar el código hasta el punto de poder escribirlo en una sola línea, quedaría tal que así:

 

JLabelIcon.setIcon(new ImageIcon(this.getClass().getResource(“img/icono.png”)));

 

Es más confuso, pero nos ahorramos la definición de tres variables; dir(String), url(URL) y icono(ImageIcon).

 

Y asta aquí llegamos por hoy, esperamos que os haya servido de ayuda. Si tenéis cualquier pregunta dejad un comentario y responderemos tan rápido como sea posible.

Hasta la próxima frikaz@s!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *