// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Adicionando um Seletor de Arquivos para uma Aplicação Java
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Adicionando um Seletor de Arquivos para uma Aplicação Java - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Adicionando um Seletor de Arquivos para uma Aplicação Java

_Contribuição de Petr Dvorak link:http://blogs.oracle.com/joshis/entry/a_quick_jfilechooser_demo[+(Dez 2009)+], mantido por Alyona Stashkova_

Este tutorial mostra como adicionar um seletor de arquivos na aplicação Java usando o componente  ``javax.swing.JFileChooser`` . É possível codificá-lo à mão, mas utilizar o GUI Builder do NetBeans é uma maneira inteligente que economizará trabalho. Como parte do exercício, você criará uma pequena aplicação Java que carrega o arquivo  ``.txt``  na Área de texto.

Você pode fazer download link:https://netbeans.org/projects/samples/downloads/download/Samples%252FJava%252FJFileChooserDemo.zip[+do projeto resultante com um seletor de arquivos+]. 


image::images/netbeans-stamp-80-74-73.png[title="O conteúdo desta página se aplica ao NetBeans IDE 7.0 e mais recente"]


*Para concluir este tutorial, você precisa dos seguintes recursos e softwares.*

|===
|Software ou Recurso |Versão Necessária 

|link:http://netbeans.org/downloads/[+NetBeans IDE+] |Versão 7.0 ou uma versão mais recente 

|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Java Development Kit+] (JDK) |Versão 6, 7 ou 8 
|===


== Criando a Aplicação

Primeiro, você cria uma nova Aplicação Java:

1. No menu principal, escolha Arquivo > Novo Projeto. Escolha a categoria Java e o tipo de projeto da Aplicação Java. Clique em Próximo.
2. Para Nome do Projeto, digite `JFileChooserDemo` e especifique o local do projeto.
3. Cancele a seleção da caixa de seleção Criar Classe Principal.

[.feature]
--
image::images/newproj-small.png[role="left", link="images/newproj.png"]
--


[start=4]
. Clique em Finalizar.


== Criando o Form da Aplicação

Nesta seção, você cria um contêiner  ``JFrame``  e adiciona uns poucos componentes ao mesmo.

*Para criar o form JFrame:*

1. Clique com o botão direito do mouse no nó Pacotes de Código-fonte e escolha Novo > Outro. Escola a categoria Forms Swing GUI e o tipo de arquivo JFrameForm. Clique em Próximo.
2. Para Nome de Classe, digite `JFileChooserDemo`.
3. Para Pacote, digite `jfilechooserdemo.resources`.

[.feature]
--
image::images/newjframeform-small.png[role="left", link="images/newjframeform.png"]
--


[start=4]
. Clique em Finalizar.

[start=5]
. Na janela Propriedades, insira `Aplicação de demonstração` para a propriedade Título e pressione Enter para confirmar.

*Para adicionar componentes ao form JFrame:*

1. Na Paleta, abra a categoria Menus Swing, selecione o componente Barra de Menus e arraste-o para o canto superior esquerdo do JFrame.

*Observação: * se não vir a Paleta, selecione Janela > Paleta do menu principal.

[.feature]
--
image::images/menubaradded-small.png[role="left", link="images/menubaradded.png"]
--


[start=2]
. Clique com o botão direito do mouse no item Editar do componente Barra de Menus e selecione Deletar no menu de contexto.

[start=3]
. Para adicionar um item de menu que permita abrir o FileChooser a partir da aplicação em execução, na categoria Menus Swing na Paleta, selecione um novo item de menu (JMenuItem1) e arraste-o para a Barra de Menus e solte-o no item Arquivo na Barra de Menus.

[.feature]
--
image::images/menuitemadded-small.png[role="left", link="images/menuitemadded.png"]
--

*Observação:* assegure-se de que a Barra de Menus esteja selecionada antes de arrastar outro item de menu para ela para que o último seja adicionado na barra de menus.


[start=4]
. Clique com o botão direito do mouse em jMenuItem1 na view Design e escolha Alterar Nome da Variável no menu de contexto. Renomeie o item como `Abrir` e clique em OK.

[start=5]
. Assegure-se de que o jMenuItem1 ainda esteja selecionado na view Design. Pressione a barra de Espaço para editar o texto do componente. Altere o texto para `Abrir` e pressione Enter para confirmar.

[start=6]
. Especifique o handler de ação para o item de menu Abrir. Clique com o botão direito do mouse no item do menu e escolha Eventos > Ação > Ação executada do menu de contexto. O GUI Builder alterna automaticamente para a view do Código-fonte e um novo método do handler de evento  ``OpenActionPerformed()``  é gerado. A janela do Navegador deveria se semelhante a esta:

image::images/openactionperformednavigator.png[]


[start=7]
. Para adicionar um item de menu para sair do FileChoser antes da aplicação ter sido criada, alterne de volta para o modo Design, na categoria Menu Swing na Paleta, selecione um item de menu (JMenuItem1) e arraste-o para a Barra de Menus abaixo do item de menu Abrir. Observe que o realce laranja indica onde o  ``JMenuItem1``  será colocado.

[.feature]
--
image::images/highlighting-small.png[role="left", link="images/highlighting.png"]
--


[start=8]
. Clique com o botão direito do mouse em  ``jMenuItem1``  na view Design e escolha Alterar Nome da Variável no menu de contexto. Renomeie o item como `Sair` e clique em OK.

[start=9]
. Assegure-se de que o  ``jMenuItem1``  ainda esteja selecionado na view Design. Pressione a barra de Espaço para editar o texto do componente. Altere o texto para  ``Sair``  e pressione Enter para confirmar.

[start=10]
. Especifique o handler de ação para o item de menu Sair. Clique com o botão direito do mouse no item do menu e escolha Eventos > Ação > Ação executada do menu de contexto. O GUI Builder alterna automaticamente para a view do Código-fonte e um novo método de handler de evento é gerado, denominado `ExitActionPerformed()`. O nó `ExitActionPerformed` aparece na janela do Navegador abaixo do nó `OpenActionPerformed()`.

[start=11]
. Para fazer com que o item de menu Sair funcione, você inclui o seguinte código-fonte no corpo do método `ExitActionPerformed`:

[source,java]
----

			 System.exit(0); 
----

[start=12]
. Volte para o modo Design. Na categoria Controles de Swing da Paleta, arraste uma Área de Texto ( ``JTextArea`` ) para o form, como mostrado na figura abaixo.

[.feature]
--
image::images/textareadded-small.png[role="left", link="images/textareadded.png"]
--


[start=13]
. Redimensione o componente adicionado para criar espaço para o texto exibido mais tarde pelo Seletor de Arquivos. Renomeie a variável para `textarea`. O form deve parecer com a tela a seguir:

[.feature]
--
image::images/jfilechooserdemoview_final-small.png[role="left", link="images/jfilechooserdemoview_final.png"]
--

Você precisa criar uma aplicação Java simples como base para este tutorial. Em seguida, o Seletor de Arquivos real é selecionado.


== Adicionando o Seletor de Arquivos

1. Escolha Janela > Navegação > Navegador para abrir a janela Inspetor se ela ainda não estiver aberta.
2. No Navegador, clique com o botão direito do mouse no nó  ``Outros Componentes`` . Escolha Adicionar da paleta > Janelas Swing > Seletor de Arquivos no menu de contexto

Como uma alternativa para o menu de contexto  ``Adicionar da Paleta`` , você também pode arrastar e soltar um componente  ``JFileChooser``  da categoria Janelas Swing da Paleta para a área branca do GUI Builder. Isso terá o mesmo resultado, mas é um pouco mais difícil porque a exibição do  ``JFileChooser``  é um pouco grande e você poderá acidentalmente inserir a janela em um dos painéis, o que não é o desejado.


[start=3]
. Um exame no Navegador confirma que um  ``JFileChooser``  foi adicionado ao form.

[start=4]
. Clique com o botão direito do mouse no nó  ``JFileChooser``  e renomeie a variável para `fileChooser`.

image::images/navigator_jframe.png[]

Você adicionou um Seletor de Arquivos. A seguir, você faz o ajuste fino do Seletor de Arquivos para exibir o título que deseja, adiciona um filtro de arquivo personalizado e integra o Seletor de Arquivos em sua aplicação.


== Configurando o Seletor de Arquivos


=== Implementando a Ação Abrir

1. Clique para selecionar o  ``JFileChooser``  na janela Inspetor e, a seguir, edite suas propriedades na caixa de diálogo Propriedades. Altere a propriedade  ``dialogTitle``  para `Esta é minha caixa de diálogo aberta `, pressione Enter e feche a caixa de diálogo Propriedades.
2. Clique no botão Código-fonte no GUI Builder para alternar para o modo Código-fonte. Para integrar o Seletor de Arquivos em sua aplicação, cole a seguinte snippet de código-fonte no método `OPenActionPerformed` existente.

[source,java]
----

private void OpenActionPerformed(java.awt.event.ActionEvent evt) {
    int returnVal = fileChooser.showOpenDialog(this);
    if (returnVal == JFileChooser.APPROVE_OPTION) {
        File file = fileChooser.getSelectedFile();
        try {
          // What to do with the file, e.g. display it in a TextArea
          textarea.read( new FileReader( file.getAbsolutePath() ), null );
        } catch (IOException ex) {
          System.out.println("problem accessing file"+file.getAbsolutePath());
        }
    } else {
        System.out.println("File access cancelled by user.");
    }
} 
----

*Observação: * Remova primeira e a última linha do snippet de código que duplicam os existentes no arquivo de código-fonte.


[start=3]
. Se o editor relata erros em seu código, clique com o botão direito do mouse em qualquer lugar no código e selecione Corrigir Importações ou pressione Ctrl+Shift+I. Na caixa de diálogo Corrigir Todas as Importações aceite os defaults para atualizar as instruções de importação e clique em OK.

Como é possível ver, o método  ``getSelectedFile()``  do Seletor de Arquivos é chamado para determinar em que arquivo o usuário clicou, para que você possa trabalhar com ele. Esse exemplo lê o conteúdo do arquivo e o exibe na Área de Texto.


=== Implementação de um Filtro de Arquivo

Agora você precisa adicionar um filtro personalizado que faz com que o Seletor de Arquivos somente exiba arquivos  ``*.txt`` .

1. Alterne para o modo Design e selecione o  ``fileChooser``  na janela Navegador.
2. Na janela Propriedades, clique no botão de reticências ("...") ao lado da propriedade  ``fileFilter`` .
3. Na caixa de diálogo Filtro de Arquivos, selecione Código Personalizado na caixa de combinação.

[.feature]
--
image::images/combobox-small.png[role="left", link="images/combobox.png"]
--


[start=4]
. Digite  ``new MyCustomFilter()``  no campo de texto. Clique em OK.

[start=5]
. Para fazer com que o código personalizado funcione, você escreve uma classe interna (ou externa)  ``MyCustomFilter``  que estende a classe  ``FileFilter`` . Copie e cole o seguinte snippet de código no código-fonte de sua classe abaixo das instruções de importação, para criar um classe interna que implementa o filtro.

[source,java]
----

    class MyCustomFilter extends javax.swing.filechooser.FileFilter {
        @Override
        public boolean accept(File file) {
            // Allow only directories, or files with ".txt" extension
            return file.isDirectory() || file.getAbsolutePath().endsWith(".txt");
        }
        @Override
        public String getDescription() {
            // This description will be displayed in the dialog,
            // hard-coded = ugly, should be done via I18N
            return "Text documents (*.txt)";
        }
    } 
----

*Observação:* para saber como implementar filtros de arquivo comutáveis, mais inteligentes, consulte o método link:http://java.sun.com/javase/7/docs/api/javax/swing/JFileChooser.html#addChoosableFileFilter%28javax.swing.filechooser.FileFilter%29[+addChoosableFileFilter+].


== Executando a Aplicação

1. Clique com o botão direito no projeto JFileChooserDemo e selecione Executar para iniciar o projeto de amostra.
2. Na caixa de diálogo Executar Projeto, selecione a classe principal `jfilechooserdemo.resources.JFileChooserDemo` e clique em OK.

image::images/run.png[]


[start=3]
. Na aplicação de Demonstração em execução, escolha Abrir no menu Arquivo para acionar a ação. O resultado deve ficar da seguinte forma:

[.feature]
--
image::images/result_jfilechooserdemo-small.png[role="left", link="images/result_jfilechooserdemo.png"]
--


[start=4]
. Para fechar a aplicação, selecione Sair no menu Arquivo.

Examine outras janelas e caixas de diálogo úteis do Swing como o Seletor de Cores ou o Painel de Opções na Paleta GUI.

link:/about/contact_form.html?to=3&subject=Feedback:%20Adding%20a%20FileChooser[+Enviar Feedback neste Tutorial+]



== Próximas Etapas

* link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG920[+Implementando GUIs de Java+] em _Desenvolvendo Aplicações com o NetBeans IDE_
* link:gui-binding.html[+Vinculando Beans e Dados em uma Aplicação Java com o NetBeans IDE+]
* link:gui-automatic-i18n.html[+Internacionalizando um Form GUI com o NetBeans IDE+]
* link:http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html[+Tutorial Java Tutorial: como usar Seletores de Arquivos+]
