2016-01-23 107 views
0

我想用文本和圖像GIF顯示JLabel。當我從Test類調用showLabel()方法時,我只能看到文本。我不知道如何刷新這個圖像來顯示它。我讀的是在這種情況下AWT的問題...刷新JFrame上的圖像

問:如何在我的JLabel中顯示此GIF圖像?

LabelTest.class

public class LabelTest{ 

    private JWindow frame; 
    private JLabel jLabel; 
    ImageIcon icon = new ImageIcon("PHOTO.gif");  

    public LabelTest() { 
    } 

    public void showLabel(String label) { 
     frame = new JWindow(); 
     frame.setAlwaysOnTop(true); 
     frame.setBackground(new Color(255, 255, 255)); 
     frame.setContentPane(new TranslucentPane()); 
     frame.add(new JLabel(label, icon, JLabel.CENTER)); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
     frame.paintAll(frame.getGraphics()); 
    } 

    public void hideLabel() { 
     frame.dispose(); 
    } 
} 

的Test.class

public class Test { 
    public static void main(String[] args){  
     try { 
      LabelTest p = new LabelTest(); 
      p.showLabel("I'M LABEL..."); 
      Thread.sleep(5000);  
      p.hideLabel(); 
     } catch(InterruptedException ex) { 
      Thread.currentThread().interrupt(); 
     } 
    } 
} 

TranslucentPane.class

public class TranslucentPane extends JPanel { 
    public TranslucentPane() { 
     setOpaque(true); 
    } 
    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
    } 
} 
+2

貌似程序無法找到圖片; 「PHOTO.gif」位於何處?如果它在項目的'src'文件夾中,則使用'getClass()。getResource(「PHOTO.gif」)'。如果它不在您的項目中,您必須輸入圖像的完整路徑作爲參數。 (例如'c:\\ temp \\ PHOTO.gif') –

+1

「TranslucentPane」類沒有必要。您尚未更改任何JPanel的默認行爲。 JPanel默認是不透明的。擺脫那個階級。 – camickr

回答

1

我同意LuxxMiner。
最有可能的是,圖像無法找到。
要檢查您可以使用下面的檢查路徑:

public ImageIcon loadImageIconFromPath(String path) { 
    URL imgURL = getClass().getResource(path); 
    if (imgURL != null) { 
     return new ImageIcon(imgURL); 
    } else { 
     System.err.println("Couldn't find file: " + path); 
     return null; 
    } 
} 

所以不是:

frame.add(new JLabel(label, icon, JLabel.CENTER)); 

嘗試以下操作:

ImageIcon icon = loadImageIconFromPath("PHOTO.gif");  
if (icon != null) 
    frame.add(new JLabel(label, icon, JLabel.CENTER)); 
else 
    frame.add(new JLabel("Missing image", JLabel.CENTER));