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
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!!!