analytics

miércoles, 5 de julio de 2017

Java Swing cargar y ver imagen jpg en jPanel



Vamos a ver cómo abrir una imagen, copiarla en un fichero auxiliar y visualizarla en un jPanel. Esto se emplea cuando queremos por ejemplo ver un logotipo cargado desde un fichero.


  1. Primero, utilizaremos jFileChooser para hacer la selección del fichero. 
  2. Después, haremos una copia de la imagen para guardarla en un directorio de nuestro interés. (este paso es opcional)
  3. Por último, visualizaremos la imagen en un jPanel.



Esta es la función que abrirá un diálogo para seleccionar el fichero de imagen a cargar.


      final JFileChooser fc = new JFileChooser();
            int returnVal = fc.showOpenDialog(null);

            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File file = fc.getSelectedFile();
                try {

                    String nombreImg = file.getName();
                    if (nombreImg.endsWith(".jpg")
                            || nombreImg.endsWith(".png")
                            || nombreImg.endsWith(".bmp")
                            || nombreImg.endsWith(".jpeg")) {

                        

                        File dest = new File(System.getProperty("user.dir") + "/" + nombreImg);
                        copyFileUsingStream(file, dest);
                        this.imagen= (dest.getName());
                        loadImage(dest.getName());

                    }

                } catch (Exception ex) {
                    ex.printStackTrace();
                    JOptionPane.showMessageDialog(null, "Error abriendo fichero");
                }

            }



A continuación, la función de copia de imagen de un origen a un destino. Este paso es solamente opcional. En el ejemplo original, me interesó guardar las imágenes que el usuario seleccionaba en un directorio.


private static void copyFileUsingStream(File source, File dest) throws IOException {
        InputStream is = null;
        OutputStream os = null;
        try {
            is = new FileInputStream(source);
            os = new FileOutputStream(dest);
            byte[] buffer = new byte[1024];
            int length;
            while ((length = is.read(buffer)) > 0) {
                os.write(buffer, 0, length);
            }
        } finally {
            is.close();
            os.close();
        }
    }




Por último, veremos cómo cargar la imagen en un jPanel y poderla visualizar en el panel.


private void loadImage(String name) {

        try {
            String string = System.getProperty("user.dir") + "/" + name;

            ImageIcon ii = new ImageIcon((string));

            ImagePanel panel = new ImagePanel(ii.getImage()); // NOI18N
            jPanel2.add(panel, BorderLayout.CENTER);
            panel.setCustomWidth(jPanel2.getWidth());
            panel.setCustomHeight(jPanel2.getHeight());
            panel.validate();
            panel.repaint();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }




** Cabe destacar que el jPanel donde se visualizará la imagen, está con un Layout tipo BORDERLAYOUT. Por este motivo, al añadir la imagen, se tiene el parámetro BorderLayout.CENTER.


No hay comentarios:

Publicar un comentario