martes, 5 de abril de 2011

Ajustar imagen al tamaño de un JLabel - Java

En el día a día de la programación deseamos que un JLabel contenga una imagen, sí la imagen no es del tamaño del JLabel pueda que sobre espacio, o no se vea completamente.

Como notamos, tenemos una imagen en un JLabel la cual no se puede distinguir, el siguiente código muestra como poder ajustar la imagen al tamaño del JLabel.
  1. ImageIcon fot = new ImageIcon(path_ala_imagen);
  2. Icon icono = new ImageIcon(fot.getImage().getScaledInstance(jLabel1.getWidth(), jLabel1.getHeight(), Image.SCALE_DEFAULT));
  3. jLabel1.setIcon(icono);
  4. this.repaint();
Explicación
  1. En la primera línea se carga la imagen
  2. Se crea un icono, el cual cargará la imagen, pero usa la instancia "getScalesInsance" la cual permite crear un ajuste/redimensionar  la imagen. Hemos puesto que sea del ancho del jLabel1, el cual se especifica con jLabel1.getWidth, el alto con jLabel1.getHeight y lo último son parámetros de Image.
  3. Se le otorga a JLabel1 el icono con su nueva dimensión.
  4. Este pase es opcional, a veces es necesario un repaint para que se noten los cambios.
Resultado:

48 comentarios:

Anónimo dijo...

aa gracias pffffffff staba muriendo por saber esto muchas gracias =)

Anónimo dijo...

Excelente explicación, saludoss!!

William Rodriguez M. dijo...

Excelente. Practico y directo

fagoner dijo...

Muchas gracias por sus comentarios!!!

Destructor, dijo...

Lo estaba buscando por horas, hasta que lo encontré aquí, muchas gracias

Anónimo dijo...

gracias me sirvio de mucho. ya quedo lo que necesitaba. saludos.

Anónimo dijo...

excelente mi amigo buen aporte

Anónimo dijo...

Excelente!
Muchas Gracias

Anónimo dijo...

Excelente hermano! me has salvado en un proyecto final! buen aporte y sigue así..

Saludos!!

Anónimo dijo...

Excelente aporte claro preciso y concreto

Héctor dijo...

GRACIAS, E SIRVIO DE MUCHO, SALUDOS

Anónimo dijo...

Muchas gracias por el código de verdad!!
Saludos desde México
Jorge Torrecilla

Anónimo dijo...

compadres me has salvado gracias

Anónimo dijo...

ademas de ser preciso explicas bien cada parte del codigo muchas gracias, me salvastes la pega

TasTraceur dijo...

una cosa, y para realizar esto mismo en tiempo de ejecución?? osea, que si varia el tamaño del jLabel en ejecución, se modifique el tamaño del icono automáticamente sin crear en cada redimensionamiento una imagen nueva.

Anónimo dijo...

BUEN APORTE!!

rotesban dijo...

Gracais me as ayudado

Anónimo dijo...

Excelente post!!!! gracias!

Anónimo dijo...

Gracias!!!! sencillo y práctico

Anónimo dijo...

Gracias amigo

Anónimo dijo...

Muy bueno el ejemplo y la explicacion

Leandro dijo...

Hola muy buen aporte, es lo que tenía en mente cuando pensé en Ajustar imagen al tamaño del un Jlabel pero me da error:

sun.awt.image.ImageFormatException: Unsupported color conversion request
at sun.awt.image.JPEGImageDecoder.readImage(Native Method)
at sun.awt.image.JPEGImageDecoder.produceImage(JPEGImageDecoder.java:136)
at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:269)
at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:205)
at sun.awt.image.ImageFetcher.run(ImageFetcher.java:169)
sun.awt.image.ImageFormatException: Unsupported color conversion request
at sun.awt.image.JPEGImageDecoder.readImage(Native Method)
at sun.awt.image.JPEGImageDecoder.produceImage(JPEGImageDecoder.java:136)
at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:269)
at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:205)
at sun.awt.image.ImageFetcher.run(ImageFetcher.java:169)

Sabes porque puede ser??

Anónimo dijo...

Gracias en verdad!!!

Anónimo dijo...

Muchas gracias me sirvio mucho tu codigo ;-)

Anónimo dijo...

Gracias we, ya tenia rato buscandolo

Anónimo dijo...

Estar a un día de la entrega de un proyecto y encontrarse una función que milagrosamente hace lo que ocupabas hacer... GRACIAS!!!!!!!!

Anónimo dijo...

me cogi a tu puto perro

Oscar dijo...

Gracias por el aporte

Unknown dijo...

Hermano, tu vienes del futuro. GRACIAS!

Unknown dijo...

Hola, yo tenia el problema de que tenía que poner la ruta completa de la imagen y pues si estaba agregada al proyecto pues era un problema y pues lo resolví así.

1.- String path = "/Iconos/miImagen.png";

2.- URL url = this.getClass().getResource(path);

3.- ImageIcon icon = new ImageIcon(url);

4.- Icon icono = new ImageIcon(icon.getImage().getScaledInstance(label1.getWidth(), label1.getHeight(), Image.SCALE_DEFAULT));

5.- label1.setIcon(icono);

6.- this.repaint();

Unknown dijo...

Gracias amigos me sirvio de mucho aui les pase por emdio de un metodo, se que tambien les servira de mucho. :)

public void cargarImagenStretchJButton(String imagen,JButton boton) {
ImageIcon fot = new ImageIcon(getClass().getResource(imagen));
Icon icono = new ImageIcon(fot.getImage().getScaledInstance(boton.getWidth(), boton.getHeight(), Image.SCALE_DEFAULT));
boton.setIcon(icono);
this.repaint();
}

Anónimo dijo...

muchas gracias!!! :)

Anónimo dijo...

Genial bro, siempre termino en tu pagina cuando no recuerdo como redimensionar la imagen, gracias por los aportes.
Muchas gracias

Unknown dijo...

esta genial pero una pregunta como lo ajusto de tal manera que si la imagen es mal ancha al ajustarlo se aplasta hay alguna forma de ajustar el ancho y el alto de manera proporcional sin que se deforme?

Anónimo dijo...

Gracias por todo :D

Anónimo dijo...

Muchas gracias por el aporte! :D

Unknown dijo...

gracias amigo lo que andaba buscando

Unknown dijo...

Gracias, por el aporte!!! :D

Anónimo dijo...

Excelente, simple y potente.....Saludos

Anónimo dijo...

Muchas gracias!

Anónimo dijo...

Excelente aporte.

Aliro Correa dijo...

Excelente, pero se me ocurrió hacerle unas modificaciones para que la imagen no se deforme, espero a alguien le sirva :)

Ajustar icono manteniendo sus proporciones :)

ImageIcon tmpImagen = new ImageIcon(imagenes[indice]);
float delta = ( (imagen.getWidth() * 100) / tmpImagen.getIconWidth() ) / 100f;
if(tmpImagen.getIconHeight() > imagen.getHeight())
delta = ( (imagen.getHeight() * 100) / tmpImagen.getIconHeight() ) / 100f;
int ancho = (int) (tmpImagen.getIconWidth() * delta);
int alto = (int) (tmpImagen.getIconHeight() * delta);
imagen.setIcon(new ImageIcon(tmpImagen.getImage().getScaledInstance(ancho,alto,Image.SCALE_SMOOTH)));

gabo dijo...

Muchas gracias me salvastee!

Anónimo dijo...

muchas gracias tu explicacion fue excelente eres un crack

LuisM dijo...

Muchas gracias por el aporte, me resultó muy útil

Anónimo dijo...

Despues de haber paseado toda la web aparecio este short codigo q simplemente resolvia lo q necesitaba, excelente aporte muy bien explicado y entendible. Gracias.

Dorbax dijo...

Gracias...
Solucione mi problema.
Exitos.

Unknown dijo...

Perfecto!!! 5 estrellas