Visual – JFileChooser – Open/Save Dialogs – Read/Write Text Files – Java

Publicado: 23 de abril de 2014 em Java

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.

Caixa de Diálogo

Caixa de Diálogo

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();
				
			}
		});
	}
}
Publicidade
comentários
  1. Marco Tulio disse:

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

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s