Em computação caixas de diálogo reutilizáveis que são comuns a todas as aplicações, incluindo caixas de diálogo para abrir arquivos, salvar arquivos e impressão. Uma vez que estas caixas de diálogo são implementadas pelo sistema operacional, ou classes no caso de linguagens multi plataforma, podem ser compartilhadas entre todos os aplicativos que são executados no sistema operacional, o que ajuda o usuário a experiência de consistência; quando os usuários estão familiarizados com o uso de uma caixa de diálogo de funcionamento fornecido pelo sistema em um aplicativo, eles não precisam aprender a usar essa caixa de diálogo em outras aplicações. Como essas caixas de diálogo estão disponíveis para todas as aplicações e porque ajudam a proporcionar uma experiência de usuário consistente,
JFileChooser
Fornece uma interface gráfica para navegar no sistema de arquivos, e em seguida, escolher um arquivo ou pasta a partir de uma lista ou digitando o nome de um arquivo ou diretório. Para exibir um seletor de arquivos, você costuma usar a JFileChooser API para mostrar uma caixa de diálogo modal que contém o seletor de arquivos.
Exemplo:
Neste exemplo usamos as caixas de diálogos no modo abrir e salvar arquivos para executar estes eventos sobre uma área de texto através de um buffer de escrita e leitura.
Java
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class Dialogo implements ActionListener {
// Declara componentes
JLabel rotulo;
JTextArea texto;
JScrollPane barra;
JButton botao1, botao2;
JFileChooser dlg;
BufferedReader buffer;
// Declara variaveis
String linha;
public Container criaPainel()
{
// Cria painel principal
JPanel painel = new JPanel();
// Define layout
painel.setLayout(new BorderLayout());
painel.setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
// Cria componentes
rotulo = new JLabel("Digite abra ou salve um texto");
texto = new JTextArea();
barra = new JScrollPane(texto);
botao1 = new JButton("Abrir");
botao2 = new JButton("Salvar");
dlg = new JFileChooser();
// Cria barras de rolagem
barra.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
barra.setPreferredSize(new Dimension(300, 200));
// Alinha componentes
rotulo.setAlignmentX(Component.CENTER_ALIGNMENT);
// Define eventos dos botões
botao1.addActionListener(this);
botao2.addActionListener(this);
// Cria novos paineis
JPanel painel1 = new JPanel();
JPanel painel2 = new JPanel();
// Cria layouts
painel1.setLayout(new BoxLayout(painel1, BoxLayout.PAGE_AXIS));
painel2.setLayout(new BoxLayout(painel2, BoxLayout.X_AXIS));
// Adiciona componentes aos paineis
painel1.add(rotulo);
painel1.add(Box.createVerticalStrut(10));
painel1.add(barra);
painel1.add(Box.createVerticalStrut(10));
painel2.add(botao1);
painel2.add(botao2);
// Adiciona paineis ao painel principal
painel.add(painel1, BorderLayout.PAGE_START);
painel.add(painel2, BorderLayout.CENTER);
return painel;
}
@Override
public void actionPerformed(ActionEvent arg0)
{
// Cria evento para os botões
if (arg0.getSource() == botao1)
{
// Cria variavel de dialogo
int retorno = dlg.showOpenDialog(texto);
// Verifica dialogo
if (retorno == JFileChooser.APPROVE_OPTION)
{
// Retorna nome do arquivo
File arquivo = dlg.getSelectedFile();
// Cria um buffer para o arquivo
try
{
buffer = new BufferedReader(new FileReader(arquivo));
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
// Lê as linhas do buffer
try
{
linha = buffer.readLine();
}
catch (IOException e)
{
e.printStackTrace();
}
// Laço nas linhas do arquivo
while (linha != null)
{
// Adiciona linha na area de texto
texto.append(linha + "\n");
try {
linha = buffer.readLine();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
// Cria evento para o botão
if (arg0.getSource() == botao2)
{
int retorno = dlg.showSaveDialog(texto);
if (retorno == JFileChooser.APPROVE_OPTION)
{
File arquivo = dlg.getSelectedFile();
// Cria buffer e grava o arquivo;
try
{
BufferedWriter grava = new BufferedWriter(new FileWriter(arquivo));
grava.write(texto.getText());
grava.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
public static void criaGUI()
{
// Cria formulario
JFrame formulario = new JFrame("DA - Dialogos");
formulario.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Dialogo dialogo = new Dialogo();
formulario.setContentPane(dialogo.criaPainel());
formulario.pack();;
formulario.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
// Thread do swing
criaGUI();
}
});
}
}



Muito agradecido ao Ricardo pelo excelente código, incentivo para quem está começando no Swing.