如何从Java Swing的第一帧启动.gif文件?

时间:2017-04-19 15:27:15

标签: java swing gif

我正在使用两个.gif文件并在一个框架中切换它们。

private Image currentGIF;

if(x == 0) gif = "image1.gif"
if(x == 1) gif = "image2.gif"
ImageIcon reference = new ImageIcon(gif);
currentGIF = reference.getImage();

-

public void paint(Graphics g)
{
    Graphics2D graphic = (Graphics2D) g;
    graphic.drawImage(gif, 0, 0, this);
    g.dispose();
}

-

@Override   public void actionPerformed(ActionEvent arg0) 
{
    repaint();
}

这是我的问题:

  1. image1.gif从第一帧开始。
  2. image2.gif从第一帧开始。
  3. image1.gif从随机帧开始。
  4. 似乎.gif一直在运行,当我再次显示image1时,它不会从第一帧开始。

1 个答案:

答案 0 :(得分:2)

的问题:

  1. 永远不要覆盖JFrame的绘制方法,而是在JPanel的paintComponent方法中进行绘制。
  2. 永远不要丢弃JVM给你的绘画方法(paint或paintComponent)赋予的Graphics对象,因为这会破坏绘画链。
  3. 不要在绘画方法中更改GUI的状态(例如交换图像)。而是在某种类型的侦听器中执行此操作,以响应您要用于更改图像的事件 - 例如按钮的ActionListener,如果按钮按下时更改,或者是Swing计时器的ActionListener,如果要在计时器更改时更改图像。
  4. 如果这不是动画GIF,请强烈考虑将图像转换为ImageIcon,然后再次使用setIcon(...)与您想要使用的侦听器交换JLabel的图标。