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.