<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Adicionando um Seletor de Arquivos para uma Aplicação Java</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <link rel="stylesheet" type="text/css" href="../../../netbeans.css" media="screen" />
    <meta name="author" content="Petr Dvorak, Alyona Stashkova" />
    <meta name="description" content="How to add a file chooser to a Java application using the javax.swing.JFileChooser component and the NetBeans GUI Builder." />
    <meta name="keywords" content="javax.swing.JFileChooser, java, application, file, chooser, GUI builder" />
  </head>
  <body>

    <h1>Adicionando um Seletor de Arquivos para uma Aplicação Java</h1>
    <p><em>Contribuição de Petr Dvorak <a href="http://blogs.oracle.com/joshis/entry/a_quick_jfilechooser_demo">(Dez 2009)</a>, mantido por Alyona Stashkova</em></p>

    <p>
      Este tutorial mostra como adicionar um seletor de arquivos na aplicação Java usando o componente <tt>javax.swing.JFileChooser</tt>. É 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 <tt>.txt</tt> na Área de texto.    </p>

    <p>Você pode fazer download <a href="https://netbeans.org/projects/samples/downloads/download/Samples%252FJava%252FJFileChooserDemo.zip" title="Zip de demo com o projeto (JFileChooserDemo)">do projeto resultante com um seletor de arquivos</a>. <br />
    </p>

    <p><b>Conteúdo</b></p>
     <img alt="O conteúdo desta página se aplica ao NetBeans IDE 7.0 e mais recente" class="stamp" src="../../../images_www/articles/73/netbeans-stamp-80-74-73.png" title="O conteúdo desta página se aplica ao NetBeans IDE 7.0 e mais recente" />
    <ul>
      <li><a href="#app" title="Criando a Aplicação"> Criando a Aplicação</a></li>
      <li><a href="#menu" title="Criando o Form da Aplicação">Criando o Form da Aplicação</a></li>
      <li><a href="#filechooser" title="Adicionando o Seletor de Arquivos">Adicionando o Seletor de Arquivos</a></li>
      <li><a href="#config" title="Configurando o Seletor de Arquivos">Configurando o Seletor de Arquivos</a></li>
      <li><a href="#run" title="Executando a Aplicação">Executando a Aplicação</a></li>
    </ul>
<p><b>Para concluir este tutorial, você precisa dos seguintes recursos e softwares.</b></p>

    <table>
        <tbody>
            <tr>
                <th class="tblheader" scope="col">Software ou Recurso</th>
                <th class="tblheader" scope="col">Versão Necessária</th>
            </tr> 
            <tr>
                <td class="tbltd1"><a href="http://netbeans.org/downloads/">NetBeans IDE</a></td>
                <td class="tbltd1">Versão 7.0 ou uma versão mais recente </td>
            </tr>
            <tr>
                <td class="tbltd1"><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Java Development Kit</a> (JDK)</td>
                <td class="tbltd1">Versão 6, 7 ou 8 </td>
            </tr>
                      
        </tbody>
    </table>
  

    <h2><a name="app"></a>Criando a Aplicação</h2>

    <p>Primeiro, você cria uma nova Aplicação Java:</p>
    <ol>
      <li>No menu principal, escolha Arquivo > Novo Projeto. Escolha a categoria Java e o tipo de projeto da Aplicação Java. Clique em Próximo.</li>
      <li>Para Nome do Projeto, digite <code>JFileChooserDemo</code> e especifique o local do projeto.</li>
      <li>Cancele a seleção da caixa de seleção Criar Classe Principal.    
	  <p class="align-center"><a href="../../../images_www/articles/72/java/gui-filechooser/newproj.png" rel="lytebox" title="Assistente Novo Projeto"> <img alt="Assistente Novo Projeto" border="1/" src="../../../images_www/articles/72/java/gui-filechooser/newproj-small.png"></a></p></li>
	  <li>Clique em Finalizar.</li>
	  
    </ol>
    
    
    <h2><a name="menu"></a>Criando o Form da Aplicação</h2>
    <p>Nesta seção, você cria um contêiner <tt>JFrame</tt> e adiciona uns poucos componentes ao mesmo.</p>
	
	<p><b>Para criar o form JFrame:</b></p>
        <ol>
            <li>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.</li>
            <li>Para Nome de Classe, digite <code>JFileChooserDemo</code>.</li>
            <li>Para Pacote, digite <code>jfilechooserdemo.resources</code>.
			<p class="align-center"><a href="../../../images_www/articles/72/java/gui-filechooser/newjframeform.png" rel="lytebox" title="O novo contêiner JFrame está sendo criado"> <img alt="O novo contêiner JFrame está sendo criado" border="1/" src="../../../images_www/articles/72/java/gui-filechooser/newjframeform-small.png"></a></p></li>
			
            <li>Clique em Finalizar.</li>
			<li>Na janela Propriedades, insira <code>Aplicação de demonstração</code> para a propriedade Título e pressione Enter para confirmar.</li>
        </ol>
	<p><b>Para adicionar componentes ao form JFrame:</b></p>
        <ol>
            <li>Na Paleta, abra a categoria Menus Swing, selecione o componente Barra de Menus e arraste-o para o canto superior esquerdo do JFrame. 
			
			 <p class="notes"><b>Observação: </b> se não vir a Paleta, selecione Janela > Paleta do menu principal. </p>
			 <p class="align-center"><a href="../../../images_www/articles/72/java/gui-filechooser/menubaradded.png" rel="lytebox" title="Barra de Menu adicionada ao form JFrame"> <img alt="Barra de Menu adicionada ao form JFrame" border="1/" src="../../../images_www/articles/72/java/gui-filechooser/menubaradded-small.png"></a></p></li>

			<li>Clique com o botão direito do mouse no item Editar do componente Barra de Menus e selecione Deletar no menu de contexto. </li>
			<li>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.
			<p class="align-center"><a href="../../../images_www/articles/72/java/gui-filechooser/menuitemadded.png" rel="lytebox" title="Item de Menu adicionado à Barra do Menu"> <img alt="Item de Menu adicionado à Barra do Menu" border="1/" src="../../../images_www/articles/72/java/gui-filechooser/menuitemadded-small.png"></a></p>
			 <p class="notes"><b>Observação:</b> 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. </p></li>
			
			<li>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 <code>Abrir</code> e clique em OK.</li>
			<li>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 <code>Abrir</code> e pressione Enter para confirmar.</li>
			<li>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 <tt>OpenActionPerformed()</tt> é gerado. A janela do Navegador deveria se semelhante a esta: 
			<p class="align-center"><img alt="Item de Menu adicionado à Barra do Menu" border="1/" src="../../../images_www/articles/72/java/gui-filechooser/openactionperformednavigator.png"></p></li>
			<li>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 <tt>JMenuItem1</tt> será colocado. 
		 <p class="align-center"><a href="../../../images_www/articles/72/java/gui-filechooser/highlighting.png" rel="lytebox" title="Realce"> <img alt="Realce" border="1/" src="../../../images_www/articles/72/java/gui-filechooser/highlighting-small.png"></a></p></li>
			<li>Clique com o botão direito do mouse em <tt>jMenuItem1</tt> na view Design e escolha Alterar Nome da Variável no menu de contexto. Renomeie o item como <code>Sair</code> e clique em OK.</li>
			<li>Assegure-se de que o <tt>jMenuItem1</tt> ainda esteja selecionado na view Design. Pressione a barra de Espaço para editar o texto do componente. Altere o texto para <tt>Sair</tt> e pressione Enter para confirmar.</li>
			<li>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 <code>ExitActionPerformed()</code>. O nó <code>ExitActionPerformed</code> aparece na janela do Navegador abaixo do nó <code>OpenActionPerformed()</code>. </li>   
			<li>Para fazer com que o item de menu Sair funcione, você inclui o seguinte código-fonte no corpo do método <code>ExitActionPerformed</code>:  
			 <pre class="samplecode">
			 System.exit(0); </pre></li>      
	  <li>Volte para o modo Design. Na categoria Controles de Swing da Paleta, arraste uma Área de Texto (<tt>JTextArea</tt>) para o form, como mostrado na figura abaixo.
	  <p class="align-center"><a href="../../../images_www/articles/72/java/gui-filechooser/textareadded.png" rel="lytebox" title="Área de Texto adicionada ao JForm"> <img alt="Área de Texto adicionada ao JForm" border="1/" src="../../../images_www/articles/72/java/gui-filechooser/textareadded-small.png"></a></p></li>
	  <li>Redimensione o componente adicionado para criar espaço para o texto exibido mais tarde pelo Seletor de Arquivos. Renomeie a variável para <code>textarea</code>. O form deve parecer com a tela a seguir:
		 <p class="align-center"><a href="../../../images_www/articles/72/java/gui-filechooser/jfilechooserdemoview_final.png" rel="lytebox" title="Aplicação Java - GUI Builder"> <img alt="Aplicação Java - GUI Builder" border="1/" src="../../../images_www/articles/72/java/gui-filechooser/jfilechooserdemoview_final-small.png"></a></p></li>	               
        </ol>
		
        <p>Você precisa criar uma aplicação Java simples como base para este tutorial. Em seguida, o Seletor de Arquivos real é selecionado.</p>

    <h2><a name="filechooser"></a>Adicionando o Seletor de Arquivos</h2>

<ol>
    <li>Escolha Janela > Navegação > Navegador para abrir a janela Inspetor se ela ainda não estiver aberta.</li>
	<li>No Navegador, clique com o botão direito do mouse no nó <tt>Outros Componentes</tt>. Escolha Adicionar da paleta > Janelas Swing > Seletor de Arquivos no menu de contexto
	
	  <p class=tips>
        Como uma alternativa para o menu de contexto <tt>Adicionar da Paleta</tt>, você também pode arrastar e soltar um componente <tt>JFileChooser</tt> 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 <tt>JFileChooser</tt> é um pouco grande e você poderá acidentalmente inserir a janela em um dos painéis, o que não é o desejado.</p>
	</li>
    
    <li>Um exame no Navegador confirma que um <tt>JFileChooser</tt> foi adicionado ao form.
    </li>
    <li>Clique com o botão direito do mouse no nó <tt>JFileChooser</tt> e renomeie a variável para <code>fileChooser</code>.
	
                <p class="align-center"><img alt="Seletor de Arquivos adicionado - View do Navegador" border="1/" src="../../../images_www/articles/72/java/gui-filechooser/navigator_jframe.png"></p></li>
</ol>



 <p>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.</p>


    
    

    <h2><a name="config"></a>Configurando o Seletor de Arquivos</h2>
	
	<h3>Implementando a Ação Abrir</h3>

<ol>
    <li>Clique para selecionar o <tt>JFileChooser</tt> na janela Inspetor e, a seguir, edite suas propriedades na caixa de diálogo Propriedades. Altere a propriedade <tt>dialogTitle</tt> para <code>Esta é minha caixa de diálogo aberta </code>, pressione Enter e feche a caixa de diálogo Propriedades.</li>
    <li>
      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 <code>OPenActionPerformed</code> existente.   

      <pre class="samplecode">
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(&quot;problem accessing file&quot;+file.getAbsolutePath());
        }
    } else {
        System.out.println(&quot;File access cancelled by user.&quot;);
    }
} </pre>
<p class="notes"><b>Observação: </b> Remova primeira e a última linha do snippet de código que duplicam os existentes no arquivo de código-fonte. </p></li>

   <li>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.</li>
</ol>
   <p>
     Como é possível ver, o método <tt>getSelectedFile()</tt> 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. 
   </p>

    
   <h3>Implementação de um Filtro de Arquivo</h3>

  <p>Agora você precisa adicionar um filtro personalizado que faz com que o Seletor de Arquivos somente exiba arquivos <tt>*.txt</tt>.</p>
  <ol>
  
    <li>Alterne para o modo Design e selecione o <tt>fileChooser</tt> na janela Navegador. </li>
       <li>Na janela Propriedades, clique no botão de reticências ("...") ao lado da propriedade <tt>fileFilter</tt>.</li>
       <li>Na caixa de diálogo Filtro de Arquivos, selecione Código Personalizado na caixa de combinação. 
	  <p class="align-center"><a href="../../../images_www/articles/72/java/gui-filechooser/combobox.png" rel="lytebox" title="Caixa de combinação aberta"> <img alt="Caixa de combinação aberta" border="1/" src="../../../images_www/articles/72/java/gui-filechooser/combobox-small.png"></a></p></li>
	<li>
      Digite <tt>new MyCustomFilter()</tt> no campo de texto. Clique em OK.
    </li>
    <li>
      Para fazer com que o código personalizado funcione, você escreve uma classe interna (ou externa) <tt>MyCustomFilter</tt> que estende a classe <tt>FileFilter</tt>. 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.

      <pre class="samplecode">
    class MyCustomFilter extends javax.swing.filechooser.FileFilter {
        @Override
        public boolean accept(File file) {
            // Allow only directories, or files with &quot;.txt&quot; extension
            return file.isDirectory() || file.getAbsolutePath().endsWith(&quot;.txt&quot;);
        }
        @Override
        public String getDescription() {
            // This description will be displayed in the dialog,
            // hard-coded = ugly, should be done via I18N
            return &quot;Text documents (*.txt)&quot;;
        }
    } </pre></li>
  </ol>
  <p class=notes><b>Observação:</b> para saber como implementar filtros de arquivo comutáveis, mais inteligentes, consulte o método <a href="http://java.sun.com/javase/7/docs/api/javax/swing/JFileChooser.html#addChoosableFileFilter%28javax.swing.filechooser.FileFilter%29" target="_blank" title="Documentação de API de JDK">addChoosableFileFilter</a>. 
  </p>

<h2><a name="run"></a>Executando a Aplicação</h2>
<ol>
    <li>Clique com o botão direito no projeto JFileChooserDemo e selecione Executar para iniciar o projeto de amostra. </li>
	<li>Na caixa de diálogo Executar Projeto, selecione a classe principal <code>jfilechooserdemo.resources.JFileChooserDemo</code> e clique em OK.
	<p class="align-center"><img alt="Executar" border="1/" src="../../../images_www/articles/72/java/gui-filechooser/run.png"></p>
	</li> 
	<li>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:
	  <p class="align-center"><a href="../../../images_www/articles/72/java/gui-filechooser/result_jfilechooserdemo.png" rel="lytebox" title="Demonstração JFileChooser - resultado"> <img alt="Demonstração JFileChooser - resultado" border="1/" src="../../../images_www/articles/72/java/gui-filechooser/result_jfilechooserdemo-small.png"></a></p>
</li>
    
	<li>Para fechar a aplicação, selecione Sair no menu Arquivo. </li>
  </ol>
    <p>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.</p>

      <div class="feedback-box" ><a href="/about/contact_form.html?to=3&subject=Feedback:%20Adding%20a%20FileChooser">Enviar Feedback neste Tutorial</a></div>
      <br style="clear:both;" />   
   
<h2><a name="next"></a>Próximas Etapas</h2>

  <ul>
  <li><a href="http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG920">Implementando GUIs de Java</a> em <i>Desenvolvendo Aplicações com o NetBeans IDE</i>
    <li><a href="gui-binding.html">Vinculando Beans e Dados em uma Aplicação Java com o NetBeans IDE</a></li>
    <li><a href="gui-automatic-i18n.html">Internacionalizando um Form GUI com o NetBeans IDE</a></li>
    <li><a href="http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html" target="_blank" title="Como usar Seletores de Arquivos">Tutorial Java Tutorial: como usar Seletores de Arquivos</a> </li>
  </ul>

  </body>
</html>
