0

如何在 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);
            }

        }
    }
}    
4

2 回答 2

2

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

使用您拥有的相同代码循环数组,您就完成了

于 2013-09-24T08:21:45.263 回答
2

有关显示多个图像的两种方式(多种方式),请参阅此答案的许多图像部分。

有关形成图像文件过滤器(比硬编码类型)的更好方法,请参阅此答案。

于 2013-09-24T08:34:16.987 回答