Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java swing中单击时的图像动画_Java_Image_Swing_Jbutton_Animated Gif - Fatal编程技术网

java swing中单击时的图像动画

java swing中单击时的图像动画,java,image,swing,jbutton,animated-gif,Java,Image,Swing,Jbutton,Animated Gif,假设我有一个JFrame和一个JButton。单击按钮后,我想显示动画(.gif)图像。而另一个事件(例如ActionEvent e)停止在JFrame中显示动画。我的方法应该是什么?在JLabel中显示第一个图像(动画帧)。当用户单击该按钮时,启动Swing计时器,将标签图标更改为下一帧,显示所有帧后循环。当用户再次单击按钮时,停止动画 import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.Act

假设我有一个
JFrame
和一个
JButton
。单击按钮后,我想显示动画(
.gif
)图像。而另一个事件(例如
ActionEvent e
)停止在
JFrame
中显示动画。我的方法应该是什么?

JLabel
中显示第一个图像(动画帧)。当用户单击该按钮时,启动Swing
计时器,将标签图标更改为下一帧,显示所有帧后循环。当用户再次单击按钮时,停止动画

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);
    }
}
import java.awt.*;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.net.URL;
导入javax.imageio.imageio;
导入javax.swing.*;
类Chomper{
公共静态void main(字符串[]args)引发异常{
最终图像[]帧={
ImageIO.read(新URL(“http://i.stack.imgur.com/XUmOD.png")),
ImageIO.read(新URL(“http://i.stack.imgur.com/zKyiD.png")),
ImageIO.read(新URL(“http://i.stack.imgur.com/4maMm.png")),
ImageIO.read(新URL(“http://i.stack.imgur.com/wn9V5.png"))
};
Runnable r=新的Runnable(){
@凌驾
公开募捐{
jpanelgui=newjpanel(newborderlayout());
最终JLabel动画=新JLabel(新图像图标(帧[0]);
添加(动画、边界布局、中心);
ActionListener动画=新建ActionListener(){
私有整数指数=0;
@凌驾
已执行的公共无效操作(操作事件e){

如果(索引我不知道如何从gif中获取帧/图像,但是如果您可以访问它们,那么您可以使用该类为您制作动画。它在后台使用计时器制作动画,因此您可以随意启动/停止/暂停计时器。

@EranMedan:我想他想
启动
停止
imation,而不仅仅是要显示它我想我既不是想显示图像也不是对帧有问题,所以这些建议没有帮助。“我想在单击按钮后显示动画(
.gif
最好是)图像。”GIF是唯一支持动画的格式。所以说“最好”只是让人困惑。我猜最重要的是“动画”。请确认,然后编辑你的问题,使其更清晰。
这些建议没有帮助。
那么也许你应该问一个清楚的问题。人们正在尽最大努力处理这些信息iven。删除“Preference”一词并不能解决任何问题。如何从gif中访问单个帧/图像?图像的来源见。+1,您在我发布答案时更新了来源。我想知道内部帧与此有什么关系。@camickr抱歉,我今晚有黄油复制手指。这些东西带有内部frames是另一个答案的来源。:PI也这么认为,我也这么做过很多次:)