在JPanel上显示动态gif

8
在我的JFrame的覆盖函数中:
@Override
protected void paintComponent(Graphics g) {

    BufferedImage imagePerson;
    try {
        imagePerson = ImageIO.read(new File("errol.gif"));
    } catch (IOException e) {
        imagePerson = null;
    }

    g.drawImage(imagePerson, i * increment, j * increment - 1, null);
}

我该如何更改代码,使GIF动画正常显示(不使用线程)。我已经花费了很多时间尝试让它正常工作,但是一直没有成功。


5
无论你选择哪种解决方案,你可能不想每次调用 paintComponent 时都要 加载 图像。 paintComponent 方法被频繁调用。在初始化时将其加载一次并存储在类的实例变量中。 - Mark Peters
2个回答

5
你可以使用 ImageIcon 来实现这个目的。参考这里这里。如果你需要在 JPanel 上显示动画,则只需将带有 ImageIconJLabel 添加到面板即可。

问题是我想在JPanel上移动动画GIF的位置,这些位置在"protected void paintComponent(Graphics g)"中计算出来。 - Yawn
我看不出在那个函数中添加JLabel到JPanel的方法。 - Yawn
你可以移动你的ImageIcon,或者设置一个Timer重复调用repaint方法,然后在paintComponent方法中找出在哪个框架上绘制。 - aioobe
2
将标签添加到面板中。然后,要移动标签,只需调用setLocation()方法即可。无需覆盖paintComponent()方法或调用repaint()方法。 - camickr

1

查看这个示例,了解如何在Swing中显示动画gif。您无需使用任何线程:

Icon imgIcon = new ImageIcon(this.getClass().getResource("ajax-loader.gif"));
JLabel label = new JLabel(imgIcon);
label.setBounds(668, 43, 46, 14); // for example, you can use your own values
frame.getContentPane().add(label);

来源


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接