0

基本的な目的は、3x3 パターンの 9 つの白い正方形で満たされた JPanel を持つことです。正方形は 150x150 の空白の白い .jpg ファイルです。後で、プログラムは空白の正方形を単純な画像の選択の 1 つに変更する必要があり、いつでも任意の正方形を変更できる必要があるため、この方法にする必要があります。問題は、簡単に言うと、NullPointerException が発生することです。配列をnullとして初期化することと関係があると想定する必要がありますが、そうしないとNetBeans(はい、NetBeans ...)が私に腹を立てるようです。配列のサイズを宣言しようとしても同じです。(それは... "ArrayType[arraysize] arrayName;"、はい?"

ええと、私はただ乱暴に推測しています。

編集 - NullPointerException は修正されましたが、空白 (白) の画像がフレームに表示されません。以下のコードは、新しい状態を反映するように編集され、より関連性の高い行が追加されました。

関連するすべてのコードは次のとおりです。

JFrame controller = new JFrame("SmartHome Interface");
controller.setVisible(true);
controller.setSize(480,500);
controller.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//[...]

JPanel labelPanel = new JPanel();

//[...]

labelPanel.setBackground(Color.GREEN);

//[...]

ImageIcon blank = new ImageIcon("../Images/blank.jpg");

//[...]

controller.add(labelPanel);

//[...]

JLabel[] labels = new JLabel[9];
        for (int i = 0; i <= 8; i++)
        {
            int xLowBound;
            int xUpBound;
            int yLowBound; 
            int yUpBound;

            //Maths for positioning the labels correctly. Should be 150px in size with 10px gaps each.
            xLowBound = (i % 3) * 160;
            xUpBound = xLowBound + 150;
            yLowBound = (i / 3) * 160;
            yUpBound = yLowBound + 150;

            labels[i] = new JLabel();
            labels[i].setIcon(blank);
            labels[i].setBounds(xLowBound, yLowBound, xUpBound, yUpBound);
            labelPanel.add(labels[i]);
        }

また...ImageIconのファイルパスは正しいですか?コード自体は「src/smarthome」にあり、画像は「src/Images」にあります

また、フォーラムの慣習や行動規範などを破った場合はお詫びします。新入りさん、気をつけていたのですが、何か忘れてしまったのかもしれません。

4

2 に答える 2

2

問題は次のようになります。

JLabel[] labels = null;
for (int i = 0; i <= 8; i++) {
    labels[i].setIcon(blank);
}

labels == null であるため、このコード フラグメントは失敗します。したがって、labels[i] == null です。

代わりにこれを使用してください:

JLabel[] labels = new JLabel[9];
for (int i = 0; i <= 8; i++) {
    labels[i] = new JLabel();
    labels[i].setIcon(blank);
}
于 2013-08-03T13:20:09.750 に答える