JTextArea.append não aparece na mesma hora

4 respostas
renatosilva

Estou dando um append em um JTextArea e logo após chamando uma ação demorada na GUI. Eu queria saber um jeito de forçar a GUI a se atualizar antes de iniciar a ação demorada. Nota: eu não quero que a ação rode em outra thread, eu quero travar a aplicação mesmo, enquanto a ação não terminar, mas antes de começar a ação eu quero que o texto do JTextArea seja atualizado com o que eu já apendei. No Delphi era só chamar o update do componente se me lembro bem…

PS: dei uma olhada rápida sobre invokeLater e EDT mas não consegui “pescar” como eu usaria.

4 Respostas

renatosilva

Ninguém nunca precisou fazer uma tarefa longa como parte de um evento?

keller

Não lembro quando nem como nem porque, mas as vezes setVisible(false) setVisible(true) resolve o problema.
É a melhor solução? Não! É elegante? Não!

Se você precisa disso pra ontem tente isso, senao tente encontrar uma outra solucao, refazer o codigo, tentar em outro componente tipo algum da SwingLabs… enfim…
Boa sorte. :slight_smile:

renatosilva

Não sei é o que você está dizendo, mas resolvi assim:

No actionPerformed eu desabilito o frame e disparo o código em outra thread com prioridade normal. Assim eu desbloqueio a EDT, e o append aparece “na hora”, e no final a outra thread habilita o frame de novo.

Só fiquei sem entender a utilidade do SwingWorker…

Não entendi qual o mal de permitir que se force a atualização da GUI dentro do manipulador…

F

keller:
Não lembro quando nem como nem porque, mas as vezes setVisible(false) setVisible(true) resolve o problema.
É a melhor solução? Não! É elegante? Não!

Se você precisa disso pra ontem tente isso, senao tente encontrar uma outra solucao, refazer o codigo, tentar em outro componente tipo algum da SwingLabs… enfim…
Boa sorte. :)

isso nao seria para substituir o componnent.repaint?

não sei se é aplicavel pq isso serve qndo o esqma eh montado em tempo de execução…
ou eu que intendi mal?

Criado 20 de outubro de 2008
Ultima resposta 22 de out. de 2008
Respostas 4
Participantes 3