2011-05-07 4 views
4

나는 간단한 JLabel의를 사용하여 투명 JDialog를에 애니메이션 GIF를 표시하기 위해 노력하고있어와이 거의 작동자바 : 애니메이션 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의 캔버스가 다시 칠하는 단계마다 지워지지 않는다고 가정합니다. 아무도 내가 이것을 고칠 수있는 방법을 알고 있습니까?

편집 : 해결책을 찾았습니다.

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); 
    } 
} 

이이 화면에 잘 모든 프레임을 그립니다 이 나는 ​​이미지 아이콘의 paintIcon 기능을 무시하고 수동으로 캔버스를 취소했다.

+0

대한 수정을 추가로 similair입니다입니다, GradientPaint이 포함되어 있습니다. 고마워! – Zar

답변

1

http://download.oracle.com/javase/tutorial/uiswing/misc/trans_shaped_windows.html는 나에게 문제를 해결하는 방법에 대한 아이디어를 준 Image 또는 ImageIcon

+0

이것이 애니메이션의 문제점을 어떻게 해결하는지 보지 못했습니다. 정교한 케어? – Shinmera

+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 그리고 JLabel에 Image 또는 ImageIcon 넣기 http://download.oracle.com/javase/tutorial/ uiswing/components/icon.html – mKorbel

+0

그건 내 코드가 투명성없이 이미하고있는 것입니다. – Shinmera