2011-05-07 91 views
4

我想用一个简单的JLabel显示在透明的JDialog GIF动画:的Java:动画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,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,0,0)); 
     g2.clearRect(0, 0, getIconWidth(), getIconHeight()); 
     super.paintIcon(c, g2, x, y); 
    } 
} 

这很好地借鉴每一帧的画面。

+0

你的编辑告诉我如何解决这个问题的想法。谢了哥们! – Zar 2013-03-08 21:40:13

回答

1
+0

我无法看到这是如何解决我的动画问题。谨慎阐述? – Shinmera 2011-05-07 18:01:03

+0

创建一个窗口(JFrame http://download.oracle.com/javase/tutorial/uiswing/components/toplevel.html),放在这里JLabel http://download.oracle.com/javase/tutorial/uiswing/components/ label.html与BorderLayout.Center http://download.oracle.com/javase/tutorial/uiswing/layout/border.html和tha JLabel把Image或ImageIcon http://download.oracle.com/javase/tutorial/ uiswing/components/icon.html – mKorbel 2011-05-07 18:10:38

+0

这就是我的代码已经做的,没有透明度。 – Shinmera 2011-05-07 18:35:47