C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 123 を表示中)
■73437 / )  どうしてもnullがはいってしまう。
□投稿者/ java初心者 (1回)-(2014/09/25(Thu) 18:37:34)

分類:[.NET 全般] 

皆様はじめまして。
長文失礼致します。
javaを習得しようと初めて、4日目になるものです。
現在こういったものを作成しようとしております。
1:window(フレームを作成)→2:フレームにパネルを作成(親パネル)→3:親パネルの上に画像や文字、子のパネル等を作成し貼り付けていく。

2までは順調に作成できたのですが、3の画像を貼り付けるところで、プログラム文が長くなり、メソッド化をしようとした所、画像の表示ができず、色々と悩んでおります。(どうしても画像を表示する際に使用している変数jpにNull値がはいってしまいます・・・)

コンパイラ時のエラー文:
Exception in thread "main" java.lang.NullPointerException
  at gazousyori.putMonster(gazyousyori.java70)
  at gazousyori.main(gazousyori.java60)

色々なサイトを閲覧し、対応策を考えましたが、自分ひとりでは手におえず、皆様がたのご助力をお願いしたく投稿させて頂きました。 よろしければ、皆様のご助力の程宜しくお願い致します。以下ソース

/*----------画像の切り取りの表示のメソッド化---------*/
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.awt.Font;
import java.awt.Color;
import java.io.File;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;

public class gazousyori{

	static BufferedImage	b_all;
	static JPanel		jp;

	public static void main(String[] args) throws java.io.IOException{
	
		System.out.println("Hello");

		//windowフレームを作成、表示
		JFrame	jf = new JFrame();                                              //インスタンス化とjfのオブジェクト化
		jf.setBounds( 50, 100, 940, 800 );                                      //windowのサイズの設定
		jf.setVisible( true );                                                  //windowの表示
		jf.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );                    //windowのxボタン有効化

		//【親】パネルを作成し、フレームに貼り付け
		JPanel	jp = new JPanel();                                              //パネルを新しく作成
		jp.setBackground( Color.BLACK );                                        //パネルの色を黒に設定
		jf.add( jp );                                                           //windowに黒色のパネルを貼り付け

		//ラベルを作成し、パネルに貼り付け
		JLabel	jl = new JLabel("将来的にはテロップ");                          //インスタンス化とjlのオブジェクト化

		Font f = new Font( Font.MONOSPACED,                                     //文字の大きさの設定:明朝体+太文字+斜体
                                   Font.BOLD |
                                   Font.ITALIC, 20 );
		jl.setFont( f );                                                        //文字の大きさの設定をjlに代入
		jl.setForeground( new Color( 255, 128, 0 ) );                           //文字色設定
		jp.add( jl );                                                           //親パネルに貼り付け

		//【子】パネルを作成し、【親】パネルに貼り付け
		JPanel jpChild = new JPanel();                                          //パネルを新しく作成
		jpChild.setBackground( Color.RED );                                     //パネルの色を黒に設定
		jp.add( jpChild );                                                      //【親】パネルに【子】パネルを貼り付け

		//ラベルを作成し、【子】パネルに貼り付け
		JLabel	jlChild = new JLabel("将来はステータスを表示");                 //インスタンス化とjlChildのオブジェクト化
		jlChild.setFont( f );                                                   //文字の大きさの設定をjlChildに代入
		jlChild.setForeground( Color.WHITE );                                   //文字色設定
		jpChild.add( jlChild );                                                 //【子】パネルjpに貼り付け

		File file = new File("vx_chara_4.png" );                                //File形式をfileにインスタンス化
		b_all = ImageIO.read( file );                                           //b_allに画像全体を読み込む

		int cx = 32;
		int cy = 32;

		putMonster( 0, 0, cx, cy );						//キャラクター表示
		putMonster( 1, 0, cx, cy );						//キャラクター表示
		putMonster( 2, 0, cx, cy );						//キャラクター表示
	}

	public static void putMonster( int x, int y, int cx, int cy ){
		BufferedImage	bshort = b_all.getSubimage( cx * x, cy * y, cx, cy );   //x0,y0,〜x32,y32までの画像をbshortに読込む
		ImageIcon	ii = new ImageIcon( bshort );                           //JLabel用に型変換
		JLabel jlImage = new JLabel( ii );                                      //jlImageにオブジェクトiiの画像を代入
		jlImage.setSize( cx, cy );                                              //画像のサイズを設定
		jp.add( jlImage );                                                      //親】パネルにjlImageを貼り付け
	}
}
----------------------------------------------------------------------------------------------------------------------------------
メソッドを作成せず、一つずつ画像を貼り付けた場合
gazousyoriクラスにある
	static BufferedImage	b_all;
	static JPanel		jp;
を削除し、mainコンストラクタのputMonster();を消す、
public static void putMonster( int x, int y, int cx, int cy ){
のメソッドを消し、mainコンストラクタの終了まえに以下を記述
{
		//getSubimageを使用したいので、以下^の手順を記述する。(部分を切るとる為の手段)
		File	file = new java.io.File("vx_chara_4.png" );			//File形式をfileにインスタンス化
		BufferedImage	b_all = ImageIO.read( file );				//インスタンス化したfileをBufferedImage b_allに画像全体を読み込む
		BufferedImage	bshort = b_all.getSubimage( 32 * 3, 0, 32, 32 );		//Subimagex0,y0,〜x32,y32までの画像をbshortに読み込む
		//JLabelが読み込めるものはIcon型なので、biをIcon型iiに読み込む必要がある
		ImageIcon	ii = new ImageIcon( bshort );				//JLabel用に型変換
		
		//JLabelが読み込めるIcon型に読みこんだので、JLabelの変数jlImageにiiを代入する。
		JLabel jlImage = new JLabel( ii );					//jlImageにオブジェクトiiの画像を代入
//		jlImage.setBounds( 10, 10, 320, 320 );					//画像のサイズを設定
		//setBoundsで最初のx,yが0,0で良い場合はsetSizeを使用する事が出来る。
		jlImage.setSize( 32, 32 );						//画像のサイズを設定
		jp.add( jlImage );							//【親】パネルにjlImageを貼り付け
		}

		{
		File	file = new java.io.File("vx_chara_4.png" );			//File形式をfileにインスタンス化
		BufferedImage	b_all = ImageIO.read( file );				//fileをBufferedImage ballに画像全体を読込
		BufferedImage	bshort = b_all.getSubimage( 32 * 4, 32 * 4, 32, 32 );	//x0,y0,〜x32,y32までの画像をbshortに読込
                ImageIcon	ii = new ImageIcon( bshort );				//JLabel用に型変換
		JLabel jlImage = new JLabel( ii );					//jlImageにオブジェクトiiの画像を代入
		jlImage.setSize( 32, 32 );						//画像のサイズを設定
		jp.add( jlImage );							//【親】パネルにjlImageを貼り付け
		}


返信 編集キー/


管理者用

- Child Tree -