Prezados,
Estou trabalhando em um GUI que terá um JTextArea onde serão exibidas algumas linhas de log. São 3 linhas no máximo a cada vez que um determinado método for executado.
Acontece que, eu gostaria (para ficar melhor visualmente) de apagar essas linhas a cada 5 segundos depois que elas forem exibidas e gostaria que fosse utilizando um efeito de fade out.
Pesquisando no Google e colocandomeus próprios pensamentos lógicos, eu pensei em criar um vetor R, G e B cada um com os tons de cinza da tabela de cores RGB e fazer com que a cor do conteúdo dentro da JTextArea (objeto onde as linhas de log serão exibidas) fossem gradualmente apagando.
Então, o contador deveria inciar após 5 segundos que as linhas de log fossem inseridas e então a cada 1 segundo, os valores do .Foreground da JTextArea fossem se alterando conforme os valores dos vetores.
Cirei dois contadores (ti e ti2) o primeiro com execução após 5 segudos e o segundo a cada 1 segundo). Para isso, cirei um metodo “ContadorApagarLog” que irá iniciar o primeiro contador (ti) e este irá então chamar o segundo (ti2).
O segundo contador (ti2) ele sim irá a cada segundo chamar uma classe “FadeOutDisplayLog” que de fato irá apagar, em fade out, o conteúdo desta JTextArea.
Irei colocar aqui o código que estou usando para fazer isso, o processo em si, está funcionando, porém estou tendo problemas pois cada vez que o log é inserido o tmepo diminui, ao ponto do conteúdo do log ser apagado instantaneamente.
class FadeOutDisplayLog extends TimerTask{
public void run(){
if (apagador <= 8){
int[] r = {51,76,102,127,153,178,204,229,255};
int[] g = {51,76,102,127,153,178,204,229,255};
int[] b = {51,76,102,127,153,178,204,229,255};
JTextArea.setForeground(new Color(r[apagador],g[apagador],b[apagador]));
apagador++;
} if (apagador >= 9){
JTextArea.setText("");
ti2.cancel();
}
}
}
class ApagarLog extends TimerTask {
public void run(){
apagador = 0;
ti2 = new Timer();
//ti.scheduleAtFixedRate(new ApagaLog(), 5000, 1*500);
ti2.schedule(new Tela.FadeOutDisplayLog(), 0, 500);
ti.cancel();
}
}
private void ContadorApagarLog(){
ti = new Timer();
//ti.scheduleAtFixedRate(new ApagaLog(), 5000, 1*500);
ti.schedule(new ApagarLog(), 5000);
}
Os testes que estou realizando são da seguinte forma, coloquei um Keylistener e a cada vez que preciono uma tecla ele deve fazer um append no JTextArea escrevendo a palavra “Teste” e também chama o metodo “ContadorApagarLog()” e então todo o processo de apagar o conteúdo dessa JTextArea deve começar. Apagando depois de 5 segundos do texto ser inserido e graduando a cada 1 segundo depois disso ate chegar a cor branca.
Mais uma vez irei citar aqui o problema: Todo o processo está funcionando, os dados estão graduando sim, porem, se eu inserir um valor neste JTextArea e todo o processo começar, após repetições deste processo o tempo em que o log deve começar a apagar os dados (5 segundos) e o tempo de fade out (1 segundo para cada tom de cinza) dimunui e muito, chegando a pontos que se eu inserir o texte “Teste” sequencialmente após ter apagado o anterior, por mais ou menos 3 vezes, os valores estão se apagando instantaneamente, ou seja, o tempo está dominuindo.
Espero ter sido claro nas explicações e agradeço já a ajuda de todos.
Sem mais,