Ler .txt em janela gráfica [RESOLVIDO! agradecido!]

26 respostas
C

Senhores, muito bom dia.

Estou com um relatório em .txt, e gostaria de criar uma janela gráfica para exibir as informaçoes contidas no relatório. Via console usando FileReader e BufferedReader ja consigo ler as informacoes, porém isto nao é suficiente, preciso exibir as informacoes a partir de uma GUI, ou seja, os dados exibidos em uma janela.

Alguém tem uma dica??

26 Respostas

wolmirGarbin

Bom Dia,

Cara não é dificil se ja conseguio estrair os dados do .txt e carregar para a aplicação a unica coisa que precisa fazer é a interface, ou seja criar uma tela para mostrar os dados e em vez de chamar System.out.print mostrar dentro de um componente visual…

No netbeans em novo projeto - exemplos acredito que tenha um exemplo de como fazer algo assim…

e aqui tem alguns exemplos talvez ajude… http://javainterface.wikidot.com/interfacejava

Qualquer duvida posta ai… valew!

isaiaspf

Sua aplicação seria para qual plataforma? Desktop?

C

sim, desktop.

Estou usando o Eclipse Indigo com Window builder

isaiaspf

Certo. Então, você provavelmente tem uma lista com as informações pegas no arquivo .txt.
O que você precisa fazer agora é manipular esta lista usando JTable (Swing) para mostrar as informações na tela.

Você já usou ou conhece o component JTable do Swing?

douglaskd

se quizer ver o resultado rapido, instala o netbeans que é mais facil,

mais se tiver um tempo sobrando, estuda sobre Swing e faça na mão(não recomendo não - muito tempo perdido sem estar na lógica do negocio)

C

isaiaspf:
Certo. Então, você provavelmente tem uma lista com as informações pegas no arquivo .txt.
O que você precisa fazer agora é manipular esta lista usando JTable (Swing) para mostrar as informações na tela.

Você já usou ou conhece o component JTable do Swing?

hummm… conheço mas nao consigo integrar com o meu .txt

isaiaspf

Como você está fazendo para ler esse txt? O resultado você coloca onde?
Posta o código que fica mais fácil pra ajudar :wink:

acbit

.

Nicolas_Fernandes

Você sabe fazer telas Swing na mão?
Se não sabe, aconselho FORTEMENTE a aprender como faz o “caminho das pedras”. Só é bom usar um editor GUI quando você já tem uma base sólida na construção de GUIs e sabe como é o funcionamento por trás do editor. Além do mais, quando você usar gerenciadores externos de layout (MigLayout, por exemplo), você fará suas interfaces na mão.

Portanto, se ainda não tem ideia de como fazer suas GUIs, aprenda nos inúmeros tutoriais que você vai encontrar na internet. Aprenda a como construir uma tela, a como fazer o layout, como organizar os componentes, como criar modelos e documentos para os componentes. Vale a pena, e é uma aprendizagem e tanto!

C
isaiaspf:
Como você está fazendo para ler esse txt? O resultado você coloca onde? Posta o código que fica mais fácil pra ajudar :wink:
nao repare a qualidade do programa, nem o contexto dele :D
package melzometro_gui;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JOptionPane;

import com.sun.org.apache.xml.internal.serialize.LineSeparator;

public class MelzometroTestDriver {

	public void MelzometroExecutation() throws IOException {

	

		String lineSeparator = System.getProperty("line.separator");
		String lineSeparator2line = System.getProperty("line.separator")
				+ System.getProperty("line.separator");
		// REGRAS DO ANIMAL 2
		RegrasDoAnimal2 acao = new RegrasDoAnimal2();

		File name = new File("Melzometro.txt");

		if (name.exists()) {
			System.out.println("Arquivo encontrado");
			acao.GravarDados();
		} else {
			System.out.println("O arquivo nao foi encontrado, criando arquivo");
			JOptionPane
					.showMessageDialog(
							null,
							"O Arquivo nao foi encontrado."
									+ "\n"
									+ "O arquivo de dados será criado, necessário reiniciar o programa.");
			// Criando aqurivo com booleano para sobrescrever
			FileWriter writer = new FileWriter("Melzometro.txt", true);

			writer.write(lineSeparator);
			writer.write(":::: MELZOMETRO 2.02 ::::");
			writer.write(lineSeparator2line);
			

			// fechamento do write
			writer.flush();
			writer.close();
		}

	}

}
package melzometro_gui;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JOptionPane;

public class RegrasDoAnimal2 {

	public void GravarDados() {

		try {
			FileWriter fw = new FileWriter("Melzometro.txt", true); // Abre o
																	// arquivo
			BufferedWriter writer = new BufferedWriter(fw);
			String lineSeparator = System.getProperty("line.separator");
			String lineSeparator2line = System.getProperty("line.separator")
					+ System.getProperty("line.separator");

			// Mensagem Joption
			JOptionPane.showMessageDialog(null, ":::: MELZOMETRO 2.02 ::::");

			// Joptions atribuindo os valores do usuario nas variaveis
			String DataAtaqueAnimal = JOptionPane.showInputDialog(
					"Entre com Data do ataque animal (DD/MM/AA)",
					JOptionPane.QUESTION_MESSAGE);
			String HoraLocalAtaqueAnimal = JOptionPane.showInputDialog(
					"Entre com a hora e local do ataque (HH:MM / local)",
					JOptionPane.QUESTION_MESSAGE);
			String CausaAtaqueAnimal = JOptionPane.showInputDialog(
					"Entre com as causas do ataque",
					JOptionPane.QUESTION_MESSAGE);
			String EfeitosAtaqueAnimal = JOptionPane.showInputDialog(
					"Entre com os efeitos do ataque",
					JOptionPane.QUESTION_MESSAGE);

			// Gravando no arquivo criado
			writer.write(lineSeparator);
			writer.write("Quando foi este ataque do poodle?");
			writer.write(lineSeparator);

			// Gravacoes das variaveis atribuidas no arquivo criado
			writer.write("Data do ataque do Animal: " + DataAtaqueAnimal);
			writer.write(lineSeparator);
			System.out.println("Gravando DataAtaqueAnimal");
			writer.write("Hora e local: " + HoraLocalAtaqueAnimal);
			writer.write(lineSeparator);
			System.out.println("GravandoHoraLocalAtaqueAnimal");
			writer.write("Causas: " + CausaAtaqueAnimal);
			writer.write(lineSeparator);
			System.out.println("Gravando CausaAtaqueAnimal");
			writer.write("Efeitos gerados pelo ataque: " + EfeitosAtaqueAnimal);
			writer.write(lineSeparator);
			writer.write("=======MEL=============================== :P =======");
			System.out.println("Gravando EfeitosAtaqueAnimal");

			// Joption com mensagem final
			JOptionPane
					.showMessageDialog(null, "Dados Cadastrados com sucesso");
			// Systemout no console com mensagem final
			System.out.println("Dados Cadastrados com sucesso");

			writer.flush();
			writer.close();

		} catch (SecurityException securityException) {
			System.err
					.println("Você não pode escrever no arquivo, talvez não tenha permissões.");
			JOptionPane
					.showMessageDialog(null,
							"Você não pode escrever no arquivo, talvez não tenha permissões.");

		} catch (FileNotFoundException fileNotFoundException) {
			System.err.println("O arquivo de dados não foi encontrado.");
			JOptionPane
					.showMessageDialog(
							null,
							"O arquivo de dados não foi encontrado, ou você não tem permissão para acessa-lo");

		} catch (IOException e) {
			e.printStackTrace();

		}

	}

	public String LerDados() {

		FileReader reader;
		try {
			reader = new FileReader("Melzometro.txt");
			BufferedReader leitor = new BufferedReader(reader);
			String linha = null;
			while ((linha = leitor.readLine()) != null) {
				System.out.println(linha);
				
				
			
			}
		} catch (SecurityException securityException) {
			System.err
					.println("Você não pode escrever no arquivo, talvez não tenha permissões.");
			JOptionPane
					.showMessageDialog(null,
							"Você não pode escrever no arquivo, talvez não tenha permissões.");

		} catch (FileNotFoundException fileNotFoundException) {
			System.err.println("O arquivo de dados não foi encontrado.");
			JOptionPane
					.showMessageDialog(
							null,
							"O arquivo de dados não foi encontrado, ou você não tem permissão para acessa-lo");

		} catch (IOException e) {
			e.printStackTrace();

		}
		return null;

	}
}

Repare que ele cria um arquivo chamado Melzometro.txt, e grava as informacoes no mesmo, gostaria de pegar este relatorio e exibi-lo em uma GUI.

Repare que o metodo LerDados já exibe as informacoes do .txt no console.

isaiaspf

Nicolas Fernandes:
Você sabe fazer telas Swing na mão?
Se não sabe, aconselho FORTEMENTE a aprender como faz o “caminho das pedras”. Só é bom usar um editor GUI quando você já tem uma base sólida na construção de GUIs e sabe como é o funcionamento por trás do editor. Além do mais, quando você usar gerenciadores externos de layout (MigLayout, por exemplo), você fará suas interfaces na mão.

Portanto, se ainda não tem ideia de como fazer suas GUIs, aprenda nos inúmeros tutoriais que você vai encontrar na internet. Aprenda a como construir uma tela, a como fazer o layout, como organizar os componentes, como criar modelos e documentos para os componentes. Vale a pena, e é uma aprendizagem e tanto!


Também sou dessa opinião. Ficar arrastando componentes de um lado pro outro não te proporciona a mesma noção que fazendo a view na mão.

isaiaspf

Cara, pra começar você pode alterar seu método LerDados() para algo assim:public List<String> lerDados() { List<String> dados = new ArrayList<String>(); ... try { ... String linha = null; while((linha = leitor.readLine()) != null) { dados.add(linha); } } ... return dados; }Esta lista que é retornada você usa na JTable.

acbit

.

isaiaspf

Caso queira seguir a sugestão do amigo acbit e usar JTextArea, altere o método lerDados para:public String lerDados() { StringBuffer dados = new StringBuffer(); ... try { ... String linha = null; while((linha = leitor.readLine()) != null) { dados.append(linha); dados.append("\n"); } } ... return dados.toString(); }E na view:JTextArea textArea = new JTextArea(new RegrasDoAnimal2().lerDados()); ...

Nicolas_Fernandes

isaiaspf:
Nicolas Fernandes:
Você sabe fazer telas Swing na mão?
Se não sabe, aconselho FORTEMENTE a aprender como faz o “caminho das pedras”. Só é bom usar um editor GUI quando você já tem uma base sólida na construção de GUIs e sabe como é o funcionamento por trás do editor. Além do mais, quando você usar gerenciadores externos de layout (MigLayout, por exemplo), você fará suas interfaces na mão.

Portanto, se ainda não tem ideia de como fazer suas GUIs, aprenda nos inúmeros tutoriais que você vai encontrar na internet. Aprenda a como construir uma tela, a como fazer o layout, como organizar os componentes, como criar modelos e documentos para os componentes. Vale a pena, e é uma aprendizagem e tanto!


Também sou dessa opinião. Ficar arrastando componentes de um lado pro outro não te proporciona a mesma noção que fazendo a view na mão.

Além de não proporcionar a mesma noção, você não tem como fazer uma herança legal entre formulários, fazer reuso de código, classes abstratas para facilitar a implementação de eventos de determinados componentes…
Aprendi programando interfaces na mão e até hoje as construo assim. É muito melhor, pois tenho total noção do que estou fazendo, aplicando-se também as vantagens que citei acima.

isaiaspf

Nicolas Fernandes:
Além de não proporcionar a mesma noção, você não tem como fazer uma herança legal entre formulários, fazer reuso de código, classes abstratas para facilitar a implementação de eventos de determinados componentes…
Aprendi programando interfaces na mão e até hoje as construo assim. É muito melhor, pois tenho total noção do que estou fazendo, aplicando-se também as vantagens que citei acima.

Concordo em gênero, número e grau.
E além do mais, depois de definido um padrão de view para o projeto (aplicação) se torna muito mais fácil e menos custoso de criar novas telas/formulários/tabelas…

Nicolas_Fernandes

isaiaspf:
Nicolas Fernandes:
Além de não proporcionar a mesma noção, você não tem como fazer uma herança legal entre formulários, fazer reuso de código, classes abstratas para facilitar a implementação de eventos de determinados componentes…
Aprendi programando interfaces na mão e até hoje as construo assim. É muito melhor, pois tenho total noção do que estou fazendo, aplicando-se também as vantagens que citei acima.

Concordo em gênero, número e grau.
E além do mais, depois de definido um padrão de view para o projeto (aplicação) se torna muito mais fácil e menos custoso de criar novas telas/formulários/tabelas…

É bem por aí mesmo, Isaías. O meu último software desktop em JAVA, por exemplo. Eu fiz várias classes que agrupavam o comum das Views. Quando ia fazer uma view específica, fazia somente algumas linhas de código, implementava os eventos dos botões; o resto tava tudo padronizado, bonitinho. Foi uma mão na roda!

isaiaspf

Bah, muito bom.
Recentemente também tive uma experiência parecida onde o meu sistema monta automaticamente um layout estilo formulário de acordo com os componentes (JLabel, JTextField…) declarados na classe de repositório passada.

C

Agradecido a todos… funcionou quase que perfeito, embora eu tive de retirar os try e catch para que conseguisse rodar o programa.

Porém ainda nao consigo integrar a Jscrollbar com a textarea. O que fazer?

isaiaspf

Cara, é bem simples:JScrollPane scrollPane = new JScrollPane(suaJTable);

C

opa! funcionou perfeiramente.

Muito Obrigado!!

isaiaspf

Você deve adicionar o scroll:JTextArea textArea = new JTextArea(new RegrasDoAnimal2().LerDadosTeste()); JScrollPane scrollPane = new JScrollPane(textArea); contentPane.add(scrollPane);Ou:JTextArea textArea = new JTextArea(new RegrasDoAnimal2().LerDadosTeste()); contentPane.add(new JScrollPane(textArea));

Nicolas_Fernandes
cavibr:
isaiaspf:
Cara, é bem simples:
JScrollPane scrollPane = new JScrollPane(suaJTable);

quando compilo na janela não aparece nada, inclusive a textarea tambem some.

public GUIExibirArquivo() throws IOException {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.X_AXIS));
		
		JTextArea textArea = new JTextArea(new RegrasDoAnimal2().LerDadosTeste());
		contentPane.add(textArea);
		JScrollPane scrollPane = new JScrollPane(textArea); 
	}

Você tem que adicionar o seu scrollPane ao invés do textArea no seu formulário!

Nicolas_Fernandes

Isaias foi mais rápido… rs

isaiaspf

rsrs :stuck_out_tongue:

C

Fico muito agradecido aos senhores por toda atenção. Realmente fico lisonjeado pela prestatividade e auxilio de todos vos.

Criado 3 de agosto de 2011
Ultima resposta 4 de ago. de 2011
Respostas 26
Participantes 6