Pessoal,
Estou desenvolvendo um visualizador de imagens usando J2SE (swing).
Imaginem a seguinte situação: Tenho 2 arquivos: “ImagemA.jpg” e “ImagemB.jpg”.
Tenho um JFrame principal e um JLabel responsável por carregar as imagens. Quando pressiono a tecla “seta para esquerda”, o JLabel apresenta o arquivo “ImagemA.jpg” e quando pressiono a tecla “seta para direita”, o JLabel apresenta o arquivo “ImagemB.jpg”.
Agora vem o problema, imaginem que em um momento minha aplicação pega um novo arquivo “ImagemC.jpg” e renomeia para “ImagemB.jpg”. Portanto o arquivo “ImagemB.jpg” antigo não existe mais, correto?
Só que quando pressiono a tecla “seta para direita”, o JLabel continua apresentando a imagem antiga do arquivo “ImagemB.jpg”. É como se ele não atualizasse algum cache.
Já tentei reinstanciar o JLabel, remover do container e colocar novamente, mas… nada!
Por favor, façam o teste. É muito simples. Basta pegarem qualquer arquivo de imagem JPG (3 arquivos) e fazerem o procedimento:
Seta esquerda: Mostra imagem1
Seta direita: Mostra imagem2
Sem fechar a aplicação, acessem o windows explorer, e renomeie o arquivo imagem3 para imagem2.
Seta direita: Continua mostrando arquivo imagem2 antigo!
Detalhe: Se fechar a aplicação e abri-la novamente, aí ele atualiza!
Se alguém souber como resolver isso, por favor me ajudem.
Segue abaixo um pequeno código de exemplo.
import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
@SuppressWarnings("serial")
public class ImagemPaginador extends JFrame {
private JLabel lblImagem = new JLabel();
public ImagemPaginador() {
initComponents();
}
private void initComponents() {
//key UP
addKeyListener(new java.awt.event.KeyAdapter() {
public void keyReleased(java.awt.event.KeyEvent evt) {
teclaSubiu(evt);
}
});
lblImagem.setBounds(0,0,800,600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(800, 600);
// centralizar Dialog
setLocationRelativeTo(null);
getContentPane().add(lblImagem);
}
private void teclaSubiu(java.awt.event.KeyEvent evt) {
int code = evt.getKeyCode();
//Se pressionar tecla >, muda!
if (code == KeyEvent.VK_RIGHT){
lblImagem.setIcon(new ImageIcon("/home/user/teste/imagem2.jpg"));
}
//Se pressionar tecla <, pagina!
else if (code == KeyEvent.VK_LEFT) {
lblImagem.setIcon(new ImageIcon("/home/user/teste/imagem1.jpg"));
}
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new ImagemPaginador().setVisible(true);
}
});
}
}