如何从 Java Swing 的第一帧开始一个 .gif 文件?
Posted
技术标签:
【中文标题】如何从 Java Swing 的第一帧开始一个 .gif 文件?【英文标题】:How to start a .gif file from the first frame in Java Swing? 【发布时间】:2017-09-15 22:28:20 【问题描述】:我正在使用两个.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();
这是我的问题:
image1.gif
从第一帧开始。
image2.gif
从第一帧开始。
image1.gif
从随机帧开始。
似乎.gif
一直在运行,当我再次显示image1
时,它并没有从第一帧开始。
【问题讨论】:
您可能还想看看Image#flush
【参考方案1】:
问题:
-
永远不要覆盖 JFrame 的paint 方法,而是在 JPanel 的 paintComponent 方法中进行绘图。
切勿处理 JVM 为您的绘制方法(paint 或 paintComponent)提供的 Graphics 对象,因为这会破坏绘制链。
不要在绘画方法中更改 GUI 的状态(例如交换图像)。而是在某种类型的侦听器中执行此操作,该侦听器对您要用于更改图像的事件做出反应 - 例如,如果按钮按下时发生更改,则为按钮的 ActionListener,如果图像发生更改,则为 Swing Timer 的 ActionListener在计时器更改时。
如果这不是动画 GIF,强烈考虑将图像制作成 ImageIcon,然后简单地将使用
setIcon(...)
的 JLabel 图标再次与您希望使用的侦听器交换。
【讨论】:
以上是关于如何从 Java Swing 的第一帧开始一个 .gif 文件?的主要内容,如果未能解决你的问题,请参考以下文章