我想用一個簡單的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);
}
}
這很好地借鑑每一幀的畫面。
你的編輯告訴我如何解決這個問題的想法。謝了哥們! – Zar 2013-03-08 21:40:13