在单击Java挥杆图像动画(Image animation in java swing on cli

2019-08-31 07:35发布

说我有一个JFrameJButton在里面。 我要显示一个动画( .gif一旦我按一下按钮)图像。 而另一个事件(比如ActionEvent e )停止显示在动画JFrame 。 应该是什么我的做法?

Answer 1:

显示在所述第一图像(动画帧) JLabel 。 当用户点击该按钮时,启动一个Swing Timer改变所述标签到下一帧(或多个)的图标,循环,一旦它已经显示出所有帧。 当用户再次点击按钮,停止动画。

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;

class Chomper {

    public static void main(String[] args) throws Exception {
        final Image[] frames = {
            ImageIO.read(new URL("http://i.stack.imgur.com/XUmOD.png")),
            ImageIO.read(new URL("http://i.stack.imgur.com/zKyiD.png")),
            ImageIO.read(new URL("http://i.stack.imgur.com/4maMm.png")),
            ImageIO.read(new URL("http://i.stack.imgur.com/wn9V5.png"))
        };
        Runnable r = new Runnable() {

            @Override
            public void run() {
                JPanel gui = new JPanel(new BorderLayout());

                final JLabel animation = new JLabel(new ImageIcon(frames[0]));
                gui.add(animation, BorderLayout.CENTER);

                ActionListener animate = new ActionListener() {

                    private int index = 0;

                    @Override
                    public void actionPerformed(ActionEvent e) {
                        if (index<frames.length-1) {
                            index++;
                        } else {
                            index = 0;
                        }
                        animation.setIcon(new ImageIcon(frames[index]));
                    }
                };
                final Timer timer = new Timer(200,animate);

                final JToggleButton b = new JToggleButton("Start/Stop");
                ActionListener startStop = new ActionListener() {

                    @Override
                    public void actionPerformed(ActionEvent e) {
                        if (b.isSelected()) {
                            timer.start();
                        } else {
                            timer.stop();
                        }
                    }
                };
                b.addActionListener(startStop);
                gui.add(b, BorderLayout.PAGE_END);

                JOptionPane.showMessageDialog(null, gui);
            }
        };
        // Swing GUIs should be created and updated on the EDT
        // http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
        SwingUtilities.invokeLater(r);
    }
}


Answer 2:

我不知道如何从一个GIF得到帧/图像,但如果你有机会到他们,那么你可以使用动画图标类做动画给你。 它在后台使用定时器做动画,所以你可以简单地启动/停止/暂停计时器如你所愿。



文章来源: Image animation in java swing on click