2011-05-07 116 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