加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java:带透明窗口的动画GIF

发布时间:2020-12-15 02:25:21 所属栏目:Java 来源:网络整理
导读:我正在尝试使用简单的JLabel在透明的JDialog上显示动画gif: JDialog dialog = new JDialog();AWTUtilities.setWindowOpaque(dialog,false);JLabel label = new JLabel();ImageIcon ii = new ImageIcon("animation.gif");label.setIcon(ii);JPanel panel = n
我正在尝试使用简单的JLabel在透明的JDialog上显示动画gif:

JDialog dialog = new JDialog();
AWTUtilities.setWindowOpaque(dialog,false);

JLabel label = new JLabel();
ImageIcon ii = new ImageIcon("animation.gif");
label.setIcon(ii);

JPanel panel = new JPanel();
panel.setBackground(new Color(0,0));
panel.add(label);
dialog.add(panel);

dialog.setVisible(true);

这几乎可行.它平滑地显示动画,并且确实具有透明度.
问题是所有动画帧都被覆盖而不是每帧步骤获得一个清除??的画布和当前帧.
我假设JLabel的画布没有在每个重绘步骤中清除.
有谁知道我怎么解决这个问题?

编辑:
我想出了一个解决方案.
我不得不重写ImageIcon的paintIcon函数并手动清除画布:

class ClearImageIcon extends ImageIcon{
    public ClearImageIcon(String filename){super(filename);}

    @Override
    public synchronized void paintIcon(Component c,Graphics g,int x,int y) {
        Graphics2D g2 = (Graphics2D)g.create();
        g2.setBackground(new Color(0,0));
        g2.clearRect(0,getIconWidth(),getIconHeight());
        super.paintIcon(c,g2,x,y);
    }
}

这样可以很好地将每一帧画在屏幕上.

解决方法

这 http://download.oracle.com/javase/tutorial/uiswing/misc/trans_shaped_windows.html包含 GradientPaint,这是similair添加 Image或 ImageIcon

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读