Java - ImageIcon在FOR循环中不起作用

时间:2012-10-04 00:28:45

标签: java swing jlabel imageicon

我在ImageIcon数组中声明了30个ImageIcons。我已经使用FOR循环声明了它们。唯一的问题是,当我尝试将ImageIcon添加到JLabel并在屏幕上显示JPanel时,它不起作用。这是我的代码:

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



}

}

1 个答案:

答案 0 :(得分:3)

我会花很长时间,很努力地看一下这条线......

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

正如Adam Savage所说,“好吧,这是你的问题”。

就个人而言,我会使用ImageIO而不是Toolkit.getImage,除非你有充分的理由不这样做(因为网络连接速度慢,你需要Toolkit.getImage的后台加载功能)。 ImageIO将允许您访问更广泛的可能图像格式,这要归功于它的插件架构以及保证在返回时图像将完全加载。

像...一样的东西。

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