我在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);
}
}
答案 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使用缓存版本来更快地重复加载)