Estou criando um JTextArea que recebe linhas de um arquivo txt a cada 7 segundos. Eu preciso que a medida que esses dados forem chegando eles sejam incluídos na TextArea. Porém, a unica maneira que eu consegui fazer isso, foi concatenando a linha antiga com a nova, como mostro no código. Mas eu estou quase certa de que exista uma forma mais inteligente e limpa de se fazer isso. Alguém pode me ajudar? Agora, caso essa seja a única meneira, eu gostara de que quando eu tivesse x número de linhas, a primeira linha que foi mostrada ( a mais antiga) fosse apagada, para que uma nova fosse inserida na TextArea e assim sucessivamente… Alguém poderia me ajudar?
Obrigada
Você pode usar o .append("\n" + linha) direto no JTextArea, para o requisito da quantidade máxima de linhas teria que manter uma lista de Strings externa ao JTextArea e tratar esse limite por sua conta, sempre atualizando o texto do JTextArea à partir dessa lista.
Obs: essa é apenas uma forma, devem existir outras, como por exemplo extender a classe Document, este seria o método mais “OO” de se fazer.
Vai permitir que você escreva no JTextArea como se escrevesse no System.out.
E com uma vantagem, você pode habilitar nele o auto-scroll.
Outra coisa, o JTextArea também tem o método append.
oitathi
sim, mas quanto a minha textArea ter uma quantidade de linhas definidas, eu fiz como o amigo acima citou. Criei uma lista de Strings e nela foi incluindo cada linha que chegava. Porem, não dá certo, quando tem q aparecer a segunda linha dah erro: Exception in thread “Thread-2” java.lang.RuntimeException: Uncompilable source code
Use a classe que indiquei com AutoScroll ligado. A menos que você vá inserir MUITAS linhas, não vale a pena fazer um código para fazer a limpeza do JTextArea.
Se você realmente precisar desse código, posso passa-lo para você. Mas não é tão trivial quanto parece, pois envolve manipulação do Document diretamente.
samuel.grigolato
Se mesmo com as dicas do Vini (o AutoScroll vai manter a última linha digitada aparecendo) você precisar corrigir este código, deve trocar a linha:
por:
e adicionar um:
antes do for que itera as linhas.
oitathi
Bom, eu qureo ter o parâmetro de 300 linhas… isso é bastante, não é?
Eu acho que vai precisar… mesmo pq a minha TextArea jah tah dentro de um ScroolPane…
oitathi
quase deu certo, dei uma modificada no texto, como disse o amigo acima, porém, quando vai adiciona a linha seguinte, ela é adicionada ao lado da ultima e não embaixo… será q alguém sabe o motivo?