我想用一个简单的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