【问题标题】:Java - ImageIcon not working in FOR LoopJava - ImageIcon 在 FOR 循环中不起作用
【发布时间】:2012-10-04 00:28:44
【问题描述】:

我在 ImageIcon 数组中声明了 30 个 ImageIcon。我已经使用 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);



}

}

【问题讨论】:

  • 请,请,请,请始终致电super.paintXxx,除非您有非常、非常、非常好的理由,否则您不应忽视绘画方法的许多重要工作。 ps 我怀疑这是你的问题,但这让我很恼火:P
  • “它不起作用”到底是什么意思 - 您是否收到错误消息,或者只是什么都不可见?图像存在吗?他们真的加载了吗?你为什么要加载相同的图像 30 次,然后只使用一次? 'gameScreen' 实例的大小是否非零?哦,类名应该以大写字母开头。
  • 什么都看不见。并且图像未加载。我使用 if 语句检查

标签: java swing jlabel imageicon


【解决方案1】:

我会花很长时间仔细研究这条线......

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 使用缓存版本来加快重复加载)

【讨论】:

  • 查看代码中的行,然后查看我使用ImageIO提供的示例代码
猜你喜欢
  • 2020-05-22
  • 2014-11-03
  • 1970-01-01
  • 2017-04-13
  • 2013-12-31
  • 2017-01-14
  • 2011-07-21
  • 2016-02-05
  • 2014-02-16
相关资源
最近更新 更多