E aí GUJ!
E aí pessoal, tudo bem com vocês? Estou tendo problema numa aplicação minha e estou precisando de uma ajuda de vocês.
Meu programa tem uma classe minha que é filha de um JPanel. Ela também é uma Thread e é iniciada normalmente sem problemas, ela funciona de forma perfeita. Mas existe um problema quando eu coloco ela em um JFrame, por exemplo.
Esse “painel” meu, vamos chamar assim, é iniciado sem nenhuma configuração (me refiro quanto as dimensões e a BufferedImage que tem nele). Tanto que quando ele é visto pela primeira vez, ele não aparece - Esse não é o problema! É exatamente para ele fazer isso pois, depois, quando o usuário clicar em um botão de procurar uma devida imagem, este painel então será novamente iniciado. Aí sim ele terá largura, altura e uma imagem para ser mostrada devidamente.
Eu acredito que sempre que o usuário clicar no botão para procurar a imagem, o painel deverá ser iniciado novamente para que apareça uma nova imagem pois, a BufferedImage desse painel, deve ser iniciada de novo (por causa das diferentes dimensões de cada imagem). Eu ainda tenho que após fazer isso, remover o painel do JFrame e adicioná-lo depois de modificado (não sei se isto está certo ou se existe outra maneira de fazer essa mudança nesse meu painel).
Tudo até aí, funciona perfeitamente. Veja a ordem:
1 - Painel iniciado e adicionado ao JFrame.
2 - Ocorre um clique em procurar imagem.
3 - Imagem encontrada, painel será removido de JFrame para modificação.
4 - Painel iniciado novamente com configurações da nova imagem.
5 - Painel adicionado novamente ao JFrame.
Meu painel está dentro de um JScrollPane para se caso as dimensões da imagem ultrapassem o limite do campo de visão, eu tenha a possibilidade de ainda assim ver a imagem por completo usando scroll. Então na verdade eu removo tanto o painel do JScrollPane e também o JScrollPane do JFrame. Reinicio os dois com o painel dentro do JScrollPane e adiciono o JScrollPane de volta ao JFrame.
É aí que eu vejo um problema! Após ter feito isso tudo direitinho, aparentemente nada acontece. O JFrame não é atualizado, no sentido de não haver nenhuma alteração visível no painel ou JScrollPane. Tipo, você fica - “Ei, cadê a imagem?”. Porém, quando eu redimensiono o JFrame ou minimizo e maximizo, a tela ou sei lá o que é, é atualizada e a imagem aparece dando o resultado que eu queria, mas não na hora e do jeito que eu queria. Ou seja, tenho que redimensionar a janela (o JFrame) manualmente depois de carregar a imagem para que o JScrollPane (pelo visto, aparenta ser ele) se atualize e demonstre o meu painel com a devida imagem escolhida.
Eu tentei, após selecionar a imagem e adicionar o JScrollPane de novo no JFrame, dar um repaint() no JFrame, mas não funcionou. Tentei repaint() do JScrollPane, nada também. Tentei repaint() do meu painel, e nada novamente.
Gostaria muito muito mesmo de saber por que meu painel, JScrollPane ou o próprio JFrame só é atualizado quando tento redimensionar o JFrame ou quando este some e reaparece. Também seria muito útil saber o que faz o meu JFrame ou sei lá o que é, ser atulizado. Tem alguma coisa ali ao redimensionar o JFrame? Se alguém tiver um jeito diferente, uma dica…
Não sei mais o que fazer.
Litium.