De cualquier manera una solución muy práctica a este problema es redimensionar la imagen en cuestión de tal manera que ésta se ajuste al tamaño del JLabel. Para ello desarrollaremos un pequeño ejemplo el cual carga una imagen que no cabe en un JLabel; el programa también dispondrá de un botón con la etiqueta "escalar" que contendrá el código que permitirá ajustar, redimensionar o escalar la imagen al tamaño de la etiqueta (JLabel).
Primero nos creamos un proyecto de Java en Netbeans, en el cual creamos un formulario, al formulario le añadimos un JLabel al que llamaremos "lbImage" y un JButton al que llamaremos "btnEscalar" y le pondremos la etiqueta "escalar". Mediante la interfaz gráfica al JLabel le damos un tamaño determinado y luego le añadimos una imagen que no quepa en él.
El código que permite realizar el escalado de la imagen va dentro del botón "btnEscalar" y es el siguiente:
private void btnEscalarActionPerformed(java.awt.event.ActionEvent evt) { ImageIcon imgIcon = new ImageIcon(getClass().getResource("/informatica.gif")); Image imgEscalada = imgIcon.getImage().getScaledInstance(lbImage.getWidth(), lbImage.getHeight(), Image.SCALE_SMOOTH); Icon iconoEscalado = new ImageIcon(imgEscalada); lbImage.setIcon(iconoEscalado); }
Explicación:
En la línea de código 2 se crea un objeto de la clase ImageIcon en la cual se carga la imagen en la memoria.
A partir del objeto "imgIcon" creado, mediante el método getImage se obtiene un objeto de la clase Image y con éste se hace uso del método getScaledInstance (línea de código 3), el cual tiene tres parámetros de tipo entero: ancho, alto y una bandera que representa el tipo de algoritmo a utilizar para realizar el escalado de la imagen. Éste método devuelve un objeto de la clase Image que en este ejemplo llamamos "imgEscalada". Para que la imagen se ajuste al tamaño del JLabel utilizamos el ancho y alto de "lbImage"; y para que la imagen sea escalada con una buena calidad utilizamos el algoritmo que se indica con la constante Image.SCALE_SMOOTH.
En la línea de código 4 creamos un objeto de la clase Icon, llamado "iconoEscalado", y finalmente se le otorga al JLabel "lbImage" el icono con su nueva dimensión (línea de código 5).
Y bueno el resultado después de presionar el botón "escalar" sería el siguiente:
El ejemplo fue desarrollado bajo Windows Vista, en el lenguaje de programación Java y con ayuda del IDE Netbeans. Como siempre el código fuente y el ejecutable quedan a libre disposición.
Código Fuente: Download/Descargar
men buen aporte pero quisiera saber como cambiar
ResponderEliminaren ImageIcon imgIcon = new ImageIcon(getClass().getResource("/informatica.gif")); esta direccion("/informatica.gif") por la imagen q tengo ya en el jlabel traida desde la base de datos est es mi correo anferober@hotmail.com... GRACIAS
Si decís que tu jLabel ya está cargado con una imagen que cargas desde una base de datos o desde cualquier ubicación, en vez de utilizar esa línea de código que me decís, usá esta otra: ImageIcon imgIcon = (ImageIcon) lbImage.getIcon(); donde lbImage es tu jLabel con una imagen ya cargada, luego de esa línea de código procedé normalmente como les muestro en este ejemplo.
EliminarTenia el mismo problema y utilizando ese código me funciono gracias!!!
EliminarInputStream is = null;
Icon ii = null;
try {
ResultSet res = (ResultSet) comandos.Listar("select img_estudio1 from estudios"
+ " where paciente_id = "+ jTCodigo.getText().toString());
res.first();
is = res.getBinaryStream(1);
BufferedImage bi = ImageIO.read(is);
ii =new ImageIcon(bi);
jLImagen7.setIcon(ii);
} catch (IOException ex) {
Logger.getLogger(Pacientes.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(Pacientes.class.getName()).log(Level.SEVERE, null, ex);
}
ImageIcon imgIcon = (ImageIcon) jLImagen7.getIcon();
Image imgEscalada = imgIcon.getImage().getScaledInstance(jLImagen7.getWidth(),
jLImagen7.getHeight(), Image.SCALE_SMOOTH);
Icon iconoEscalado = new ImageIcon(imgEscalada);
jLImagen7.setIcon(iconoEscalado);
gracias men...
ResponderEliminarcalidoso q pena tanto molestar soy algo nuevo en el tema pero bueno mi pregunta es, si la imagen en vez de estar en un jlabel se encuentra en un jpanel como seria entoncs esa linea de codigo ( ImageIcon imgIcon = (ImageIcon) lbImage.getIcon(); )... Gracias
ResponderEliminarLos JPanel no tienen un método que te permita cargar una imagen como los tienen los JLabel, por tanto tampoco tienen un método que te devuelva una imagen cargada. Pero lo que se puede hacer es una clase que herede de JPanel y en ella dibujar la imagen que desees sobrecargando el método paint, en dicha clase también puedes programar los métodos setImagen(Image) y getImagen(), para cargar una imagen determinada en el JPanel y/o para obtener una imagen previamente cargada respectivamente.
Eliminarhola buenas tardes una pregunta de donde viene la palabra Image del código líneas 3 y 4
ResponderEliminarde tu código ya que al intentar utilizarlo me marca error de declaración gracias.
My coreo es carlos_flakichi@hotmail.com
Para que Java te reconozca la clase "Image" debes importar el paquete java.awt.Image. Saludos!!!
EliminarGracias me sirvio
ResponderEliminarMuchas gracias, me ha servido mucho.
ResponderEliminarMuchas gracias amigo por el aporte, mi pregunta es solamente, de que manera pueda dejar fijo mi jlabel1
ResponderEliminar