2

JFrameに画像を追加する方法を学ぼうとしています。私はGUIで十分ですが、なぜこれが機能しないのか理解できません。

不思議に思うかもしれませんが、複数の画像を作成できるように配列を設定しています。

(1)私の問題はgetClass()。getResource( "0.png");です。何らかの理由でこれは失敗し続けます。main(S ...)がオブジェクトGUIv1を作成しようとすると、image [0] ..... 0.png");で失敗します。

理由はわかりません。私は日食を使用しています。画像は、クラスが存在するデフォルトのパッケージに含まれています。テイクはありますか?

(2)ここでも何か問題があるようですが、それが最初の例外の原因ではないので、これについても回答をいただければ幸いです。

(コードフォントが間違っている場合はお詫びします。ここでは初めてです)。

import java.awt.*;
import javax.swing.*;

public class GUIv1 extends JFrame{

private static int tilesnum = 2;
private static ImageIcon[] image = new ImageIcon[tilesnum + 2];
private static JLabel[] imagepanel = new JLabel[tilesnum + 2];

public GUIv1() {
    setLayout(new FlowLayout());

    image[0] = new ImageIcon(getClass().getResource("0.png"));     //HERE (1)
    image[1] = new ImageIcon(getClass().getResource("1.png"));
    image[2] = new ImageIcon(getClass().getResource("2.png"));
    image[3] = new ImageIcon(getClass().getResource("3.png"));

    for(int i = 0; i < tilesnum + 2; i++) {
        imagepanel[i] = new JLabel(image[i]);
        add(image[i]);                                         //HERE (2)
    }

}

public static void main(String[] args) {

    GUIv1 selectorframe = new GUIv1();  
    selectorframe.setTitle("MapEditor v2");
    //JFrame mainframe = new JFrame("MapEditor v2");    
    selectorframe.pack();
    selectorframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    selectorframe.setVisible(true);
}   
}
4

1 に答える 1

4

を使用する場合getClass().getResource()、画像はクラス ファイルと同じ場所に配置する必要がありますGUIv1.class。そうしないNPEと、null値が のコンストラクタに渡されたときにImageIcon.

クラス ルートがどこにあるかわからない場合 (この場合は、画像が配置される場所)、次の結果を表示できます。

System.out.println(getClass().getProtectionDomain().getCodeSource().getLocation());

あなたのコンストラクタで。

ImageIcon次に、コンテナはコンポーネントではないため、コンテナに直接追加することはできませんJFrame。を追加できますJlabel。これコンポーネントです。

add(imagepanel[i]);
于 2013-01-29T23:14:46.373 に答える