2012-10-04 17 views
1

我有30個ImageIcons,我已經在ImageIcon數組中聲明。我已經使用FOR循環聲明瞭它們全部。唯一的問題是,當我嘗試到的ImageIcon添加到JLabel和顯示的JPanel在屏幕上,它並沒有work.Here是我的代碼:Java - ImageIcon無法在FOR循環中工作

package screens; 

import javax.swing.*; 

import java.awt.*; 

public class gameScreen extends JPanel { 
     private static final long serialVersionUID = 1L; 
     // -------------VARIABLES---------------// 
     Image wallpaper = (Image)Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/wallpaper.jpg")); 


     ImageIcon[] teamsImg = new ImageIcon[30]; 
     public gameScreen() { 

     for(int i = 0;i>30;i++){ 
      teamsImg[i] = new ImageIcon(Toolkit.getDefaultToolkit().getImage(
     getClass().getResource("images/img.png"))); 


     } 

     JLabel label = new JLabel(teamsImg[27]); 
     add(label); 

    } 

// -------------PAINT FUNCTION----------// 
public void paintComponent(Graphics g) { 
    g.drawImage(wallpaper,0,0,null); 



} 

} 
+0

請總是打電話給'super.paintXxx',油漆方法做很多重要的工作,你不應該忽視,除非你有非常非常非常好的理由。 ps我懷疑這是你的問題,但是這隻會讓我很煩惱:P – MadProgrammer

+0

對不起,對不起 – basketballhead24

+0

你的意思是「它不工作」 - 你是否有錯誤,或者只是沒有任何可見的東西?圖像是否存在?他們真的被加載?你爲什麼要加載相同的圖像30次,然後只使用一次? 'gameScreen'實例是否爲非零大小?哦,類名應該以大寫字母開頭。 – GreyBeardedGeek

回答

3

我會採取很長,很難看在這條線......

for (int i = 0; i > 30; i++) { 

正如Adam Savage會說的那樣,「好吧,那是你的問題」。除非你有一個非常好的理由不要(因爲網絡連接速度較慢,你需要後臺加載功能Toolkit.getImage),我會使用ImageIO,而不是Toolkit.getImageImageIO將爲您提供更廣泛的可能圖像格式,這要歸功於它的插件體系結構,並且保證當它返回時,圖像將完全加載。

喜歡的東西...

try { 
    wallpaper = ImageIO.read(getClass().getResource("images/wallpaper.jpg")); 

    for (int i = 0; i < 30; i++) { 

     teamsImg[i] = ImageIO.read(getClass().getResource("images/img.png")); 

    } 
} catch (IOException iOException) { 
    System.err.println("Bad things happened"); 
    iOException.printStackTrace(); 
} 

這將需要使用的Image代替ImageIcon存儲影像,但它是它給你帶來的利益一點犧牲。

此外,你知道,你一遍又一遍地加載相同的圖像?你可以加載一次,並設置數組中每個元素的引用,它實際上是同樣的事情......(據我所知,圖像API使用緩存版本,使重複加載更快)

enter image description here

+0

最新錯了嗎? – basketballhead24

+0

查看代碼中的行,然後查看我使用'ImageIO'提供的示例代碼 – MadProgrammer