Alguém sabe a classe correta para exibir um GIF animado dentro de um JLabel?
public static void main(String[] args) throws MalformedURLException {
URL url = new URL("C:\downloads\dance.gif");
Icon icon = new ImageIcon(url);
JLabel label = new JLabel(icon);
JFrame f = new JFrame("Animation");
f.getContentPane().add(label);
// e continua o codigo para baixo
Cara este código funciona apenas para imagens estáticas tipo png e jpg, para gif animados ele não funciona.
[code]public class TestGif {
private JFrame frame;
private URL url = null;
public ArrayList<BufferedImage> getFrames(URL gif) throws IOException{
ArrayList<BufferedImage> frames = new ArrayList<BufferedImage>();
ImageReader ir = new GIFImageReader(new GIFImageReaderSpi());
URLConnection urlconnection = gif.openConnection();
ir.setInput(ImageIO.createImageInputStream(urlconnection.getInputStream()), false);
for(int i = 0; i < ir.getNumImages(true); i++){
ImageReadParam param = ir.getDefaultReadParam();
frames.add(ir.read(i, param));
}
return frames;
}
public TestGif() throws FileNotFoundException {
frame = new JFrame("teste");
try {
url = new URL("");
} catch (MalformedURLException ex) {
Logger.getLogger(TestGif.class.getName()).log(Level.SEVERE, null, ex);
}
List<GifFrame> gifFrames = new ArrayList<GifFrame>();
ArrayList<BufferedImage> images = null;
try {
images = getFrames(url);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
for(BufferedImage image: images)
{
int transparantColor = image.getRGB(0, 0); // purple
BufferedImage gif = ImageUtil.convertRGBAToGIF(image, transparantColor);
long delay = 100; // every frame takes 100ms
String disposal = GifFrame.RESTORE_TO_BGCOLOR; // make transparent pixels not 'shine through'
gifFrames.add(new GifFrame(gif, delay, disposal));
}
OutputStream outputStream = new FileOutputStream("C:\\Documents and Settings\\DEVELOPER\\Desktop\\suaimagem.gif");
int loopCount = 0; // loop indefinitely
try {
ImageUtil.saveAnimatedGIF(outputStream , gifFrames, loopCount);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ImageIcon icon = null;
try {
icon = new ImageIcon(new File("C:\\Documents and Settings\\DEVELOPER\\Desktop\\suaimagem.gif").toURI().toURL());
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JLabel label = new JLabel(icon);
icon.setImageObserver(label);
frame.getContentPane().add(label);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) throws Exception {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
new TestGif();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
}[/code]
Muito estranho, eu já fiz isso com classes nativas do Java, algo em torno de 3 ou 4 linhas sem nenhum jar de terceiros. Infelizmente não tenho mais o código, mas tenho certeza que existe alguma forma.
Esta usando o NetBeans?
Voce pode utilizar apenas o ambiente grafico, criando um pacote ( imagens por exemplo ), dai coloca o gif dentro deste pacote. Depois na propriedade do JLabel coloca como ICON o gif dentro do pacote.
ele aparece animado ou estático? utilizo o eclipse, mas se isso realmente funcionar vou utilizar o netbeans apenas para descobrir o nome da classe correta.
Ele aparece animado.
Segue um exemplo.