在Swing中加载多个文件

时间:2013-09-24 08:09:59

标签: java image swing upload jfilechooser

如何在Swing中加载多个文件?

我有一个文件上传按钮,然后我以字节形式保存文件,如何更改代码,以便我可以上传多个文件。我已经尝试了很多次,但我遇到了麻烦......我希望有人可以帮助我

byte[] FileSurat;
String FilenameSurat;
File  imageSurat;

private void botton10ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    if (idPemohon == 0 && idRencanaTapak == 0){
        JOptionPane.showMessageDialog(this, "Pilih Data Yang akan di Upload");
    }else{

        JFileChooser chooser = new JFileChooser();
        chooser.setCurrentDirectory(new File(System.getProperty("user.home")));
        chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
        chooser.addChoosableFileFilter(new FileNameExtensionFilter("Images", "jpg", "png", "gif", "bmp"));
        chooser.setAcceptAllFileFilterUsed(true);

        int i = chooser.showOpenDialog(this);
        if (i == JFileChooser.APPROVE_OPTION) {
             if(labelSurat != null){

                FileSurat = null;
                FilenameSurat = null;
                jPanel2.remove(labelSurat);
                jPanel2.validate();
                jPanel2.repaint();
            }
            try {
                imageSurat = chooser.getSelectedFile();
                String filename = chooser.getSelectedFile().getName();
                String extension = "";

                int y = filename.lastIndexOf('.');
                if (y > 0) {
                    extension = filename.substring(y+1);
                }

                String xx = chooser.getTypeDescription(imageSurat);
                if("JPEG image".equals(xx) || "PNG image".equals(xx) || "JPG image".equals(xx) || "GIF image".equals(xx) || "BMP image".equals(xx)){
                    BufferedImage originalImage = ImageIO.read(imageSurat);
                    if(originalImage == null){
                        JOptionPane.showMessageDialog(rootPane, "Format file corrupt");
                    }else{
                        int type = originalImage.getType() == 0 ? BufferedImage.TYPE_INT_ARGB : originalImage.getType();
                        BufferedImage resizeImageJpg = resizeImage(originalImage, type);
                        photoSurat = new ImageIcon(toImage(resizeImageJpg));
                    }
                }else{
                    ico = new File(getClass().getResource("/images/no-image.png").getFile());
                    BufferedImage originalImage = ImageIO.read(ico);
                    int type = originalImage.getType() == 0 ? BufferedImage.TYPE_INT_ARGB : originalImage.getType();

                    BufferedImage resizeImageJpg = resizeImage(originalImage, type);
                    photoSurat = new ImageIcon(toImage(resizeImageJpg));
                }

                FilenameSurat = extension;
                FileSurat = new byte[(int) imageSurat.length()];
                FileInputStream fileInputStream = new FileInputStream(imageSurat);
                fileInputStream.read(FileSurat);

                //jPanel2.removeAll();


                labelSurat = new JLabel("", photoSurat, JLabel.RIGHT);
                jPanel2.add(labelSurat);

                ico = null;
                repaint();
                chooser.setCurrentDirectory(imageSurat);
            } catch (IOException ex) {
                Logger.getLogger(formUtama.class.getName()).log(Level.SEVERE, null, ex);
            }

        }
    }
}    

2 个答案:

答案 0 :(得分:2)

您将JFileChooser切换为允许multiple selection,然后使用JFileChooser#getSelectedFiles方法获取File s而不是单个数组。

使用您拥有的相同代码循环遍历数组

答案 1 :(得分:2)

请参阅this answer多张图片部分,了解显示多张图片的两种方式(<3>}。

有关形成图像文件过滤器的更好方法(请参阅硬编码类型),请参阅this answer