1

ImageIcon配列で宣言したImageIconが30個あります。私はそれらすべてを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);



}

}
4

1 に答える 1

3

私はこの行を本当に長く、一生懸命見ていきます...

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

アダム・サヴェッジが言うように、「まあ、あなたの問題があります」。

個人的には、本当に正当な理由がない限り、私はImageIOoverを使用します(ネットワーク接続が遅いためにのバックグラウンド読み込み機能が必要な場合など)。 プラグインアーキテクチャのおかげで、可能な画像形式のはるかに広い範囲にアクセスできるようになるだけでなく、戻ったときに画像が完全に読み込まれることが保証されます。Toolkit.getImageToolkit.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はキャッシュされたバージョンを使用して、繰り返しのロードを高速化します)

ここに画像の説明を入力してください

于 2012-10-04T00:44:57.910 に答える