import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Font;
import java.awt.Image;
import java.io.File;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
public class part20
{
static java.awt.image.BufferedImage ba ;
static JPanel jp;
static JPanel jpChild2;
public static void main( String[] args )throws java.io.IOException { System.out.println("ヤッホー"); // ウインドウフレームを作成、表示 JFrame jf = new JFrame(); jf.setBounds( 20, 40, 940, 540 ); jf.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); // 親パネルを作成し、フレームに貼り付け jp = new JPanel ( new java.awt.GridLayout( 4, 1)); jp.setBackground( Color . BLACK ); jf.add( jp ); // フォントを作成 Font f = new Font( Font.SERIF, Font.BOLD, 50); // レイアウト1行目 // パネルを作成し、親パネルに貼り付け JPanel jpChild = new JPanel(); jpChild.setBackground( Color . RED ); jp.add( jpChild ); // ラベルを作成し、子パネルに貼り付け JLabel jlChild = new JLabel( "トンヌラ Lv99 HP999/999" ); jlChild.setFont( f ); jlChild.setForeground( Color . WHITE ); jpChild.add( jlChild ); File file = new File("pipo-halloweenchara2016_26.png");//開く ba = ImageIO.read ( file ); //読み込む int cw = 32; int ch = 32; int sw = 200; int sh = 200; putMonster( 0, 0, cw, ch, sw, sh); // モンスターを表示 //レイアウト3行目 // パネルを作成し、親パネルに貼り付け JPanel jpChild2 = new JPanel(); jpChild2.setBackground( Color . CYAN ); jp.add( jpChild2 ); // ラベルを作成し、パネルに貼り付け JLabel jl = new JLabel( "魔王が世界を滅ぼそうとしています。" ); jl.setFont( f ); jl.setForeground( new Color ( 255, 128, 0) ); jp.add( jl ); jf.setVisible( true ); } /** モンスターを表示します * * @param x 表示するセルの座標x * @param y 表示するセルの座標y * @param cw セルの大きさ・幅 * @param ch セルの大きさ・高さ * @param sw 表示サイズ・幅 * @param sh 表示サイズ・高さ */ static void putMonster(int x, int y, int cw, int ch, int sw, int sh ) { BufferedImage bs = ba.getSubimage (cw * x, ch * y, cw, ch ); Image im = bs.getScaledInstance( sw, sh, Image.SCALE_DEFAULT); ImageIcon ii = new ImageIcon ( im ); //JLabel用に変換 JLabel jlImage = new JLabel ( ii ); //画像部品を生成 jlImage.setSize ( sw, sh ); //画像サイズを設定 jp.add( jlImage ); //画像貼り付け }
}
前提・実現したいこと
JPanelに画像を貼り付けたいのですがエラーがでてしまいます。
99行目の jp.add( jlImage ); のjlImageを66行目のjp.add( jpChild2 );のjpChild2に貼り付けたいです。
■■な機能を実装中に以下のエラーメッセージが発生しました。
99行目の jp.add( jlImage );のjpをjpChild2にするとエラーがでます。
発生している問題・エラーメッセージ
エラーメッセージ Exception in thread"main"java.lang.NullPointerException at part20.putMonster(part20.java:99) at part20.main(part20.java:62)
該当のソースコード
jp.add( jlImage ); //画像貼り付け
jpをjpChild2にするとエラーになります。
試したこと
親パネルjpには子パネルは何枚も貼れます。
子パネルにはLabelは貼れます。
補足情報(FW/ツールのバージョンなど)
初心者なんで理由がわかりません。
よろしくおねがいします。