在JFrame中显示透明的GIF,而不会在播放时保留每个帧? (初学者)

时间:2019-06-09 23:49:37

标签: java swing jframe awt gif

我正在尝试在JFrame中显示具有透明背景的GIF。我的初始代码很简单。

import java.awt.*;
import javax.swing.*;
public class GUIProject 
{
    public static void main(String [] args)
    {
        JFrame pokemonFrame = new JFrame();
        pokemonFrame.setSize(800, 800);
        ImageIcon imageLabel = new ImageIcon("/Users/Hannah/eclipse-workspace/Graphics/pokemon images/pikasprite.gif");
        JLabel label = new JLabel(imageLabel);
        pokemonFrame.setLayout(new FlowLayout());
        pokemonFrame.add(label);
        pokemonFrame.setVisible(true);  
    }
}

不幸的是,我遇到了一个与this post完全相同的问题。本质上,gif的过去帧会随着gif循环而保留在屏幕上,从而产生一种重影效果。我使用的是与我链接的帖子完全相同的图片。我已经尝试实施所选答案提供的解决方案,但是它对我没有用,可能是因为它太高级了,我无法理解。

我只是一个初学者,但是我真的很想为我正在上课的一个项目解决此问题。

我想要一些帮助实现此代码或为我遇到的问题找到其他解决方案。 (很抱歉,如果这个问题不正确!我自己从未使用过Stack Overflow,但是我以前一直在潜伏。)

1 个答案:

答案 0 :(得分:0)

这是我使用的代码:

import java.awt.*;
import javax.swing.*;

public class SSCCE extends JPanel
{
    public SSCCE()
    {
        JLabel label = new JLabel( new ImageIcon("bart_simpson.gif") );
        add( label );

        setBackground( Color.YELLOW );
    }

    private static void createAndShowGUI()
    {
        JFrame frame = new JFrame("SSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new SSCCE());
        frame.pack();
//      frame.setLocationByPlatform( true );
        frame.setVisible( true );
    }

    public static void main(String[] args) throws Exception
    {
        java.awt.EventQueue.invokeLater( () -> createAndShowGUI() );
/*
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowGUI();
            }
        });
*/
    }
}

这是我使用的图像:

enter image description here

我相信这是透明的图像,因为您可以更改面板的背景,并且背景可以通过图像显示。