Atualização de um JTextField

3 respostas
S

Por mais que tenha procurado, não achei nenhuma explicação que me ajudasse nesse problema.
Tenho um formulário que possui um JTextField. Esse JTextField recebe um valor diferente em cada etapa do programa. O problema é que o metodo repaint não atualiza na hora o JTextField, só depois que o programa termina. Pelo que entendi tenho que fazer uma Thread, mas não entendi muito como usar isso em um programa.
Por exemplo, suponha que tenhamos um formulário com um JTextField chamado “campoContador”… e o seguinte código:

...
for(int i = 0; i < 1000; i++){    
     campoContador = JTextField("valor atual: " + i);
     campoContador.repaint();
}
...

Como é possível fazer com que no formulário o JTextField campoContador mostre o resultado de cada interação no formulário?
O método repaint() não deveria funcionar para cada “i”?
Como conseguir esse resultado com um Thread?

3 Respostas

F

Vc esta criando um JTextField a cada iteração do loop. Ao final vai ter 1000 JTextFields!

Inicialize uma vez somente e atualize chamando

campoContador.setText("valor atual: " + i)
S

é… na realidade eu me expressei errado, mas é só um exemplo. O problema é a atualização do campo criado. O método repaint só atualiza no final do programa.
Como fazer para atualizar a cada interação?
O código correto de exemplo seria: (campoContador é um JTextField do formulario).

...
for(int i = 0; i < 1000; i++){       
     campoContador.setText("valor atual: " + i);   
     campoContador.repaint();   
}
...

Isto é só um um exemplo. Poderia ser qualquer coisa num formulário onde deseja-se mostrar ao usuário o andamento do programa. Sei que é possível fazer isso com Thread, mas não sei como fazer uso disso.
Seria bom que alguém que entenda de bem de Thread pudesse responder ou desenvolver um artigo mostrando como fazer atualização de um campo mensagem para o usuário enquanto o programa executa. Já procurei no google, varias pessoas tem a mesma dúvida, mas ainda não encontrei nenhuma resposta efetiva.

F

É só chamar

campoContador.setText("valor atual: " + i);

Não precisa de repaint.

Agora, se a tua aplicação é multi-thread, então te aconselho e estudar sobre a
famosa ‘Event Dispatcher Thread’.

Criado 11 de fevereiro de 2009
Ultima resposta 13 de fev. de 2009
Respostas 3
Participantes 2