Java + Swing 024. Modo diseño en NetBeans. Abrir imagen "jpg" y "png" desde aplicación Java.

Ejercicio: Realizar una pequeña aplicación que permita abrir imágenes tipo "jpg" y "png" en Java.
Diseñamos el formulario utilizando un JFrame. El nombre para el jFrame es a criterio de cada uno, lo importante es el diseño de la misma. En la imagen podemos ver el diseño y los nombres de variables de cada objeto (etiquetas en rojo para los nombres de variable), esto es muy importante ya que cada método utiliza el nombre de variable correspondiente para referenciar al objeto en específico. Se puede cambiar el “Nombre de variable” de cada objeto haciendo clic derecho sobre la misma y clic en “Cambiar nombre de variable…”. El jPanel donde esta insertado el campo de texto y el botón posee un borde con título, es opcional, en la imagen se ve como es el proceso para poner el título. El jPanel donde se mostrará la imagen que carguemos se puede establecer un tamaño a criterio de cada uno. (Clic para ampliar la imagen)
Observación: Tomar en cuenta que hay que utilizar las importaciones “import”, básico para utilizar ciertos métodos y objetos. El “setLocationRelativeTo(null)” sirve para centrar el formulario. El método “inicio()” que llamamos en el constructor se ejecutará al lanzar el formulario. Debemos de tener en cuenta también el paquete de nuestro jFrame.

Lista de Importaciones
Código Java
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.filechooser.FileNameExtensionFilter;
Declaración de variables de clase.
Código Java
    //Variables de clase
private BufferedImage img;
//FileNameExtensionFilter para especificar tipo de archivos a manejar...
private FileNameExtensionFilter filter = new FileNameExtensionFilter("Archivo de Imagen","jpg","png");
Creamos los métodos siguientes, cada método posee un nombre que especifica de cierta forma su función. Seguido de los método también se agrega una clase (mipanel) que servirá para manejar la imagen y pintarla en al jPanel de nuestro diseño. Se agregan comentarios que tratan de aclarar la función de cada línea de código.
Código Java
    
//Método que retorna un "BufferedImage" pasándole como argumento una "URL"
private BufferedImage cargarImagen(URL url) throws IOException{
//Se vacia la variable de clase tipo "BufferedImage"
img = null;
//Se utiliza contro de excepciones
try {
//Se utiliza ImageIO.read(url) para leer la URL y cargar el "BufferedImage"
img = ImageIO.read(url);
//se retorna el valor.
return img;
} catch (IOException e) {
JOptionPane.showMessageDialog(null, "Error cargando imagen.");
//Si hay algun erro se retorna vacío.
return null;
}

}
//Método para abrir la imagen, se pasa como argumento una jPanel.
//En este caso el argumento será "imgPanel" que es el nombre de nuesto jPanel.
private void abrirImagen(JPanel jp) throws MalformedURLException, IOException{
//Se utiliza JFileChooser para la búsqueda de archivo.
JFileChooser fileChooser = new JFileChooser();
//Especificamos el filtro, utilzando la variable de clase "filter" que creamos.
fileChooser.setFileFilter(filter);
//Utilizamos una condicional para comprobar la apertura del archivo.
int result = fileChooser.showOpenDialog(null);
if(result == JFileChooser.APPROVE_OPTION){
//Limpiamos nuestro jPanel.
imgPanel.removeAll();
//Obtenemos la URL del archivo seleccionado
URL toURL = fileChooser.getSelectedFile().toURI().toURL();
//Agregamos la URL a nuestro campo de texto.
urlText.setText(toURL.getPath());
//Utilizamos nuestro método "cargarImagen(toURL)" pasando el argumento.
BufferedImage cargarImagen = cargarImagen(toURL);
//El jp será el argumento que le pasemos al método.
//"mipanel" es una clase que se crea más abajo.
//El primer argumento un BufferedImage,
//El segundo obtiene al tamaño "Dimension" del jPanel, por tanto la imagen se agusta al mismo.
jp.add(new mipanel(cargarImagen, jp.getSize()));
//La hacemos visible y le hacemos un repaint()
jp.setVisible(true);
jp.repaint();
}
}
//Esta clase se agrega seguido de los métodos de clase, igualmente funciona.
//La clase se crea utilizando de referencia un blog jCmouse.
//Es una clase que extiendo a un JPanel.
public class mipanel extends JPanel{

BufferedImage _image;
//Constructor
public mipanel(){}
//Constructor con dos argumentos.
//El primero será un BufferedImage, el segundo la dimesión.
//Por tanto al crear el jPanel se integra la imagen.
public mipanel( BufferedImage imagen, Dimension d ){
this._image = imagen;
this.setSize(d);
}

//Este método permitirá pintar el jPanel junto con la imagen.
//Es un método heredado del JPanel.
@Override
public void paint(Graphics g){
ImageIcon imagenFondo = new ImageIcon(_image);
g.drawImage(imagenFondo.getImage(),0,0,getWidth(),getHeight(), null);
setOpaque(false);
super.paintComponent(g);
}
}
Utilizamos el evento “ActionPerformed” para llamar nuestro método “abrirImagen(…)” desde el botón buscar. Para utilizar un “Evento” hacemos clic derecho sobre el objeto y seleccionamos “Eventos” de la lista utilizamos la que podamos aplicar al objeto. En la mayoría de los casos se utiliza el “ActionPerformed”. Se agregan comentarios para tratar de facilitar el entendimiento.
Código Java
    private void buscarActionPerformed(java.awt.event.ActionEvent evt) {                                         
//Se utiliza control de excepciones para manejar el método utilizado
try {
//Se pasa como parámetro nuestro jPanel del diseño.
abrirImagen(imgPanel);
} catch (MalformedURLException ex) {
Logger.getLogger(JFrameImage.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(JFrameImage.class.getName()).log(Level.SEVERE, null, ex);
}
}
Ejecutamos nuestro formulario y vemos los resultados. El tamaño del jFrame se puede aumentar, en tanto la imagen que carguemos se ajustará a ella. (Clic para ampliar la imagen)

No hay comentarios :

Publicar un comentario en la entrada