Como abrir arquivo pelo JFileChooser

15 respostas
H

Olá, mais uma vez, amigos! :smiley:

Criei uma frame que vai cadastrar certas coisas e uma delas é uma imagem. Essa JFrame da a opção para o usuário escolher uma imagem que será exibida para confirmação e, em seguida, será armazenado seu nome e movida para uma pasta, onde estarão todas armazenadas para consulta posterior.

Consegui, até o momento, criar o JFileChooser para encotrar a imagem. Segue o código :

private void jbAbrirImagemActionPerformed(java.awt.event.ActionEvent evt) { jfcImagem.setDialogType(JFileChooser.OPEN_DIALOG); jfcImagem.setDialogTitle("Abrir Arquivo"); FileFilter filter = new ExtensionFileFilter("JPG e PNG", new String[] { "jpg" , "png" }); jfcImagem.setFileFilter(filter); jfcImagem.showDialog(this, null); }

Agora eu estou um pouco perdido em como descobrir o nome dessa imagem e exibi-la para confirmação. Algum de vocês sabe como proceder?

15 Respostas

H

Agora já descobrir como pegar o arquivo e seu nome.

int valor = jfcImagem.showDialog(this, null);
        if (valor == JFileChooser.APPROVE_OPTION) {
            File file = jfcImagem.getSelectedFile();
            String nomeArquivo = file.getName();
            // Aqui vai que eu vou fazer com esse arquivo
            
        } else {
            JOptionPane.showMessageDialog(this, "Nenhuma imagem selecionada.", "Atenção", 2);
        }

Agora preciso exibi-lo para que o usuário consirme se essa é a imagem que ele quer. Acham que seria melhor exibir a imagem em um JLabel em uma nova JFrame?

OBS: [url]http://java.sun.com/docs/books/tutorial/uiswing/components/filechooser.html[/url] Esse é o link que tem me ajudado.

M

Acredito que sim. Você pode abrir um JDialog para a confirmação. Nesse JDialog estaria algo como:

JDialog
-> JScrollPane
--> JLabel exibindo a imagem
-> JButton OK
-> JButton Cancelar
H

Consegui.

Eu fiz assim…abro o arquivo com o JFileChooser e depois mando o arquivo para esse metodo

public void showImagem(File imagem) throws IOException { BufferedImage image = ImageIO.read(imagem); String imageInfo = "Dimenções: "+image.getWidth()+"x"+ image.getHeight()+" Bands: "+ image.getRaster().getNumBands(); ImageIcon icon = new ImageIcon(image); JLabel imageLabel = new JLabel(icon); JFrame frame = new JFrame(); frame.setTitle("Mostrando Imagem: " + imagem); Container contentPane = frame.getContentPane(); contentPane.setLayout(new BorderLayout()); contentPane.add(new JScrollPane(imageLabel), BorderLayout.CENTER); contentPane.add(new JLabel(imageInfo), BorderLayout.SOUTH); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.setSize(800,800); frame.setVisible(true); }

Mas ainda me resta uma dúvida…como eu movo um arquivo de uma pasta para outra usando java(claro)?

M

Usando o método renameTo da classe File (você renomeia o arquivo e é possível movê-lo de diretório com isso).

H

você diz assim?

por que se for acho que nao da, esse metodo recebe um parametro do tipo File

M

É só criar um novo arquivo:

File dest = new File("/home/higornucci/develop-workspace/NovoArquivo.PNG");
// é importante ter certeza que o arquivo ainda não existe
// isso evita que você sobrescreva arquivos sem querer
if (dest.exists()) {
    throw new RuntimeException("Arquivo de destino já existe");
}
if (arquivo.renameTo(dest)) {
    // OK!
} else {
    // não foi possível mover
}
H

Muito sagaz, obrigado,

consegui fazer aqui xD

L

Olá, higornucci

Bom estou praticamente com a mesma dúvida que você. Acontece o seguinte eu tenho um botão “Abrir Imagem” que chama o FileDialog consigo visualizar os arquivos, mas a dúvida é o seguinte quero abrir essa imagem em um JPanel ou JLabel que está em um JForm. Gostária de saber como você fez isso, pois eu acho que falta pouca coisa para resolver isso

L

Ahhh… segue o código para abrir o FileDialog…!!

private void btnAbriImagemActionPerformed(java.awt.event.ActionEvent evt) {

FileDialog fileDialog = new FileDialog((Frame)null);
             fileDialog.setVisible(true);

}
M

FileDialog? Qual o motivo de usar essa classe? Use JFileChooser.

L

Bom eu já tentei com o JFileChooser, mas não deu certo também, eu enchergo o arquivo, mas ele não abre, se você tiver alguma idéia de como fazer agradeço a ajuda!!! Pois a inteção é abrir a imagem e salva-la no Banco de Dados “Mysql”… Sei que isso é um pouco chato, mas tem que enfrentar!!! :?

M

A questão não é abrir ou não. A GUI que lista os arquivos simplesmente não sabe o que você quer fazer com um arquivo que o usuário selecionou. Por isso ela é apenas a interface gráfica. Depois que o usuário escolher o arquivo é responsabilidade sua tratá-lo.

A questão sobre JFileChooser ao invés de FileDialog é parte da questão Swing ao invés de AWT: o AWT é pesado, lento, descontinuado, mais difícil de trabalhar, menos flexível… resumindo: use Swing sempre.

Para exibir a imagem você precisa carregá-la e mostrá-la. Algo como:

// esse aqui é seu JFileChooser e o usuário já escolheu um arquivo
// vamos descobrir qual arquivo foi
File f = fileChooser.getSelectedFile();
// vamos carregar a imagem
Image image = ImageIO.read(f);
// agora vamos mostrar em um JLabel
seuLabel.setIcon(new ImageIcon(image));
H

Eu fiz o seguinte: criei um metodo que abre um arquivo(imagem), pega suas informações e envia para um método que o abrira em uma frame.

Método que abre o arquivo.
private void jbAbrirImagemActionPerformed(java.awt.event.ActionEvent evt) {                                              
        // TODO add your handling code here:
        jfcImagem.setDialogType(JFileChooser.OPEN_DIALOG);
        jfcImagem.setDialogTitle("Abrir Arquivo");
        /*declara um filtro e estancia como ExtensionFileFilter
        não se assuste se falar que o ExtensionFileFilter não existe
        ele não existe mesmo e nós iremos criar mais tarde
        passamos como parametro o nome do nosso filtro e um
        vetor de strings de todos as extensões que queremos*/
        FileFilter filter = new ExtensionFileFilter("GIF, JPG e PNG", new String[] { "jpg" , "png", "gif" });
        // colocamos o filtro no nosso filechooser
        jfcImagem.setFileFilter(filter);
        int valor = jfcImagem.showDialog(this, null);
        if (valor == JFileChooser.APPROVE_OPTION) {
            arquivo = jfcImagem.getSelectedFile();
            nomeArquivo = arquivo.getName();
            System.out.println(nomeArquivo);
            try {
                // Aqui vai que eu vou fazer com esse arquivo
                showImagem(arquivo);
            } catch (IOException ex) {
                Logger.getLogger(CadastroRequisicao.class.getName()).log(Level.SEVERE, null, ex);
            }
        } else {
            JOptionPane.showMessageDialog(this, "Nenhuma imagem selecionada.", "Atenção", 2);
        }
    }
Método que mostra a imagem em um panel dentro de uma frame. Contem um JMenuBar com os JMenuIten: Salvar e Sair.
public void showImagem(File imagem) throws IOException {
        BufferedImage image = ImageIO.read(imagem);
        String imageInfo = "Dimenções: "+image.getWidth()+"x"+
                     image.getHeight()+" Bands: "+
                     image.getRaster().getNumBands();
        ImageIcon icon = new ImageIcon(image);

        JLabel imageLabel = new JLabel(icon);

        JMenuBar menuBar = new JMenuBar();
        JMenu menu = new JMenu("Arquivo");
        menu.setMnemonic(KeyEvent.VK_A);
        menuBar.add(menu);

        JMenuItem jmiSalvar = new JMenuItem("Salvar", KeyEvent.VK_S);
        jmiSalvar.setAccelerator(KeyStroke.getKeyStroke(
                        KeyEvent.VK_S, ActionEvent.CTRL_MASK));
        jmiSalvar.getAccessibleContext().setAccessibleDescription(
        "Salvar Imagem");
        jmiSalvar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jmiSalvarActionPerformed(evt);
            }
        });
        menu.add(jmiSalvar);

        JMenuItem jmiSair = new JMenuItem("Sair", KeyEvent.VK_R);
        jmiSair.getAccessibleContext().setAccessibleDescription(
        "Sair");
        jmiSair.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jmiSairActionPerformed(evt);
            }
        });
        menu.add(jmiSair);

        frame = new JFrame();
        frame.setJMenuBar(menuBar);
        frame.setTitle("Mostrando Imagem: " + imagem);
        Container contentPane = frame.getContentPane();
        contentPane.setLayout(new BorderLayout());
        contentPane.add(new JScrollPane(imageLabel), BorderLayout.CENTER);
        contentPane.add(new JLabel(imageInfo), BorderLayout.SOUTH);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setSize(800,800);
        frame.setVisible(true);
    }

espero que ajude.

L

Obrigado pela ajuda de vcs....
Bom pessoal eu consegui resolver essa bucha..rsrs :D :D

Segue o código

private void btnAbriImagemActionPerformed(java.awt.event.ActionEvent evt) {                                              
        JFileChooser fileChooser = new JFileChooser();
        fileChooser.setVisible(true);
        int returnValue = fileChooser.showOpenDialog(null);
        File f = fileChooser.getSelectedFile();
        try {
            Image image = ImageIO.read(f);
            jLabel13.setIcon(new ImageIcon(image));
        } catch (IOException e) {
        }

    }

vlw mesmo!!!

J

Eu tenho esse Código que pega o endereço que o usuário escolhe e mostra no jLabel só que em coloquei uma pasta dentro do meu projeto chamada imagem eu quero quando o escolher pelo jchooser ele automaticamente vai para esta pasta que esta dentro do pacote java e que pegue pelo id do meu banco de dados

public void imagem(){
        
            cadastro cad = new cadastro();
        
            
        JFileChooser choser = new JFileChooser();
            choser.setFileFilter(new FileNameExtensionFilter("Imagem", "jpg", "jpeg", "gif", "png" + cad.getId()));
            choser.setFileSelectionMode(JFileChooser.FILES_ONLY);
            choser.showDialog(choser, "Selecione");
            File f = choser.getSelectedFile();
            Image image = null;
            try {
                image = ImageIO.read(f);
            } catch (IOException ex) {
                JOptionPane.showMessageDialog(this, "Nenhuma imagem selecionada." + ex, "Atenção", 2 );
            }
         
            jLabel13.setIcon(new ImageIcon(image));
Criado 11 de março de 2010
Ultima resposta 7 de jun. de 2012
Respostas 15
Participantes 4