Ler Arquivo e mostrar em janela

Pessoal,

Estou tentando criar uma aplicação que lê um arquivo texto e mostra todo seu conteúdo em uma janela.

Como posso fazer, criei um programa para testes, mas este dá erro em
panel.add(mostraArquivo());

pois pede para o metodo mostraArquivo ser Component, mas se eu mudar, nao consigo percorrer o arquivo.

Minha ideia por enquanto é apenas mostrar o conteudo do arquivo… em seguida quero mostrar o total de linhas… e em seguida permitir editá-lo.

primeiro coloque o texto que você leu do arquivo em uma JTextArea ou um JLabel e depois adicione a jtextarea ou o jlabel ao painel.

vc esta tentando adicionar texto diretamente ao painel, axu q isso não eh possivel

o método add() de JPanel é herdado da classe java.awt.Container, e tem algumas versões sobrecarregadas, e todas elas incluem um parâmetro do tipo Component.

Quando vc obtiver um erro desse tipo olhe aassinatura do método pra ver o que ele está pedindo. E dê uma olhada na API java tb se precisar de mais detalhes

http://java.sun.com/j2se/1.5.0/docs/api/

t+

um exemplo com JLabel

private JPanel panelPrincipal;
private String texto;
private JLabel labelTexto;
.
.
.
panelPrincipal = new JPanel(); // cria o JPanel
		
texto = "Esse texto vai ser adicionado ao JPanel"; // inicia o String texto
		
labelTexto = new JLabel(); // cria o JLAbel

labelTexto.setText(texto); // adiciona o texto
		
panelPrincipal.add(labelTexto); // adiciona o JLabel ao painel

Um exemplo com JTextArea:

private JPanel panelPrincipal;
private String texto;
private JTextArea textArea;
.
.
.
panelPrincipal = new JPanel(); // cria o JPanel
		
texto = "Esse texto vai ser adicionado ao JPanel"; // inicia o String texto
		
textArea = new JTextArea(); // cria o JTextArea
textArea.setText(texto); // adiciona o texto
		
panelPrincipal.add(labelTexto); // adiciona a JTextArea ao painel

Ops… vou tenta

Cara,

Não consigo fazer o programa retornar todo o arquivo lido, apenas a ultima linha…

[code]import java.awt.BorderLayout;
import java.awt.Component;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class SwingFile extends JFrame {

String texto;

public SwingFile() {
        super("Janela");
}

public String mostraArquivo() throws FileNotFoundException {
	File file = new File("desfaz.log");
	Scanner sc = new Scanner(file);
	
	while (sc.hasNextLine()) {
		texto = sc.nextLine();
		
	}
	return texto;
	
}

public void criaJanela() throws FileNotFoundException{
	JPanel panel = new JPanel();
	JLabel labelTexto = new JLabel();
	
	labelTexto.setText(mostraArquivo());
	panel.add(labelTexto);
	
	getContentPane().add(panel, BorderLayout.CENTER);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           
    pack();
    setVisible(true);
	
}

}[/code]

kra dá uma olhada dentro do seu laço while, vc naum esta concatenando o que esta lendo do arquivo de texto:

seu metodo mostraArquivo()


public String mostraArquivo() throws FileNotFoundException
{
	File file = new File("desfaz.log");
	Scanner sc = new Scanner(file);

	while (sc.hasNextLine())
	{
		texto = sc.nextLine(); // aqui esta o erro, vc esta atribuindo somente, vc deve concatenar
	}
	return texto;

}

VERSÃO CORRETA:

public String mostraArquivo() throws FileNotFoundException
{
	File file = new File("desfaz.log");
	Scanner sc = new Scanner(file);

	while (sc.hasNextLine())
	{
		texto += sc.nextLine(); // REPARE QUE ESTOU USANDO O operador:   +=
	}

	return texto;

}

entendeu???

Hummm… OK.

Agora como faço para ele pular uma linha???

Meu arquivo seria assim:
linha1 auhauhaah
linha2 haahhaahha
linha3 haahhaahha

Deste jeito o programa colocara em uma unica String, sem o comando para nova linha.

kra nunca fiz quebra de linha no JLabel, mas acredito que a unica forma de vc fazer quebra de linha em JLabel é usando HTML, isso mesmo.
Ola o novo metodo, colocamos o que lemos do arquivo entre as tags e utilizamos
pra quebrar a linha

public String mostraArquivo() throws FileNotFoundException
{
	File file = new File("desfaz.txt");
	Scanner sc = new Scanner(file);

	texto="<html>"; // abrindo <html>
		
	while (sc.hasNextLine())
	{
		texto += sc.nextLine()+"<br>";	//concatenando tag <br> de quebra de linha ao final de cada linha lida		
	}
	texto+="</html>"; // fechamos a tag </html> 

	return texto;

}

então ao final da execução a variavel texto ficará com seguinte formato

texto da linha 1
texto da linha 2
assim por diante

espero que tenha entendido

Agora se vc estivesse adicionando seu texto a uma JTextArea ao invés de um JLabel vc poderia usar o caracter \n de quebra de linha.

Exemplo com JTextArea:

[code]public String mostraArquivo() throws FileNotFoundException
{
File file = new File(“desfaz.txt”);
Scanner sc = new Scanner(file);

while (sc.hasNextLine())
{
	texto += sc.nextLine()+"\n"; //só concatenar o "\n" já teria o efeito desejado mas 			
}

return texto;

}

public void criaJanela() throws FileNotFoundException
{
JPanel panel = new JPanel();
JTextArea area = new JTextArea();

area.setText(mostraArquivo());
panel.add(area); // adicionando a textarea ao painel ao inves do label

getContentPane().add(panel, BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

pack();
setVisible(true);
show();

}[/code]

giovaniufop,

Muito obrigado pela ajuda!

Com esse programinha pretendo implementar um outro para análise de logs de um sistema.

Aproveitando para um pós-implementação… para edição deste arquivo, como poderia fazer?

Tipo criei um programinha básico que lê um arquivo e mostra todo seu conteúdo, e como editá-lo, como se fosse um notepad??

Abraços

ah kra ae vc maxuca meu braço de tanto digitar aki ahfhdaufa

da uma pesquisada no fórum, isso que vc quer fazereh mto facil. deve ter milhares de fontes que ensinam ou te ajudam afazer isso ae.

abraço

UHAuHAUHAHUAHAUHA

Blz, valeu muito por hoje já!
ehheheeh

Abraços!!!