Para este ejemplo se emplea NetBeans, una imagen jpg y la biblioteca Java Swing.
Estructura del proyecto
Se creo un JFrame que llamará a la imagen, se aprovechar esto para mostrar como llamar a la imagen desde una ubicación externa a la aplicación y desde el mismo JAR de la aplicación.
La estructura es la siguiente: | La imagen cat.jgp es: |
---|---|
Llamada desde fuera del JAR
Las líneas de código relevante de todo el JFrame (líneas 10 a 15) son las que declaran el objeto de tipo ImageIcon desde la ruta absoluta o path seguido de un condicional que evalúa si el estado de carga de la imagen es COMPLETO y en cuyo caso procede a borrar el texto del JLabel y asignar la imagen dentro de este.
package images;
import javax.swing.ImageIcon;
public class ImagenView extends javax.swing.JFrame {
public ImagenView() {
initComponents();
//Se carga la imagen en un ImageIcon
ImageIcon icono = new ImageIcon("/NetBeansProjects/Blog/src/images/cat.jpg");
if (icono.getImageLoadStatus() == java.awt.MediaTracker.COMPLETE) {
lblImagen.setText("");
lblImagen.setIcon(icono); // Se coloca en el JLabel
}
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
lblImagen = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Cargando imagen");
lblImagen.setText("Sin imagen");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(lblImagen, javax.swing.GroupLayout.DEFAULT_SIZE,
226, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(lblImagen, javax.swing.GroupLayout.DEFAULT_SIZE,
226, Short.MAX_VALUE)
.addContainerGap())
);
pack();
}// </editor-fold>
public static void main(String args[]) {
try {
for (javax.swing.UIManager.LookAndFeelInfo info :
javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException | InstantiationException |
IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(ImagenView.class.getName())
.log(java.util.logging.Level.SEVERE, null, ex);
}
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new ImagenView().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JLabel lblImagen;
// End of variables declaration
}
Llamada desde dentro del JAR
Se requiere de la clase java.net.URL para indicar la ubicación de la imagen y cargarla posteriormente
package images;
import java.net.URL;
import javax.swing.ImageIcon;
public class ImagenView extends javax.swing.JFrame {
public ImagenView() {
initComponents();
//Se carga la imagen en un ImageIcon desde su URL
URL url = getClass().getResource("cat.jpg");
ImageIcon icono = new ImageIcon(url);
if (icono.getImageLoadStatus() == java.awt.MediaTracker.COMPLETE) {
lblImagen.setText("");
lblImagen.setIcon(icono); // Se coloca en el JLabel
}
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
lblImagen = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Cargando imagen");
lblImagen.setText("Sin imagen");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(lblImagen, javax.swing.GroupLayout.DEFAULT_SIZE,
226, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(lblImagen, javax.swing.GroupLayout.DEFAULT_SIZE,
226, Short.MAX_VALUE)
.addContainerGap())
);
pack();
}// </editor-fold>
public static void main(String args[]) {
try {
for (javax.swing.UIManager.LookAndFeelInfo info :
javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException | InstantiationException |
IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(ImagenView.class.getName())
.log(java.util.logging.Level.SEVERE, null, ex);
}
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new ImagenView().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JLabel lblImagen;
// End of variables declaration
}
En ambos casos la salida en pantalla sería:
No hay comentarios:
Publicar un comentario