Todavía soy muy nuevo en Java y programación en general. Estoy tratando de mostrar una imagen GIF usando Swing y el siguiente código:
JPanel contentPane;
JLabel imageLabel = new JLabel();
public FrostyCanvas(String imageName) {
try {
setDefaultCloseOperation(EXIT_ON_CLOSE);
contentPane = (JPanel) getContentPane();
contentPane.setLayout(new BorderLayout());
setSize(new Dimension(1600, 900));
setTitle("FrostySpirit v1.1.1 (Beta) - FrostyCanvas");
// add the image label
ImageIcon ii = new ImageIcon(this.getClass().getResource(imageName));
imageLabel.setIcon(ii);
contentPane.add(imageLabel, java.awt.BorderLayout.CENTER);
// display target GIF
this.setLocationRelativeTo(null);
this.setVisible(true);
} catch (Exception exception) {
exception.printStackTrace();
}
}
La llamada de método es el siguiente: (en una clase diferente)
FrostyCanvas FC = new FrostyCanvas("old.gif");
El GIF está animado en este punto. entonces trato de reemplazar el GIF con otro utilizando el método siguiente: (en la misma clase que ForstyCanvas (String imageName))
public void changeGif(String imageName) throws IOException
{
Icon icon; File file;
file = new File(imageName);
icon = new ImageIcon(ImageIO.read(file));
imageLabel.setIcon(icon);
}
Me llamo el método anterior en una clase diferente usando el siguiente código:
FC.changeGif("D:\\new.gif")
La imagen se sustituye con éxito. Sin embargo, ahora sólo muestra el primer cuadro de new.gif y ya no se animó. ¿Cómo puedo hacer que el nuevo movimiento GIF?
La forma ImageIO lee la imagen es la creación de una imagen estática. Lo que hay que hacer es utilizar el cargador del ImageIcon.
ImageIcon replacement = new ImageIcon(file.toURI().toURL());
De esa manera usted está utilizando el mismo método para construir el icono de la imagen como lo hace con el recurso / url.