ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

Javaの画面表示-その4:複数画面表示

2006-10-13 17:06:07 | JavaとWeb

 シリーズJavaの画面表示のつづきです。今回は、新しい画面、第二画面を作成します。

 そうすると、画面が2つになってしまうので、1つの画面を消す方法について書きます。



■仕様

 いままでの第一画面で、「打ち終わったよ」が、クリックされたら、第二画面(画面の様子はここ%sには、値が入ります)を表示し、「終了」がクリックされたらおしまい、「再挑戦する」がクリックされたら第一画面を再度表示します。

 今回は、いろいろ処理すると面倒なので、固定値を渡して、第二画面を表示します。




■概要

 第二画面の作成は、前回の第一画面同様に作成します。
 値の引渡しですが、

 1.共通領域のハッシュマップ(map)に値を設定し
 2.第二画面のオブジェクトを生成し
 3.第一画面の共通領域を第二画面の共通領域に設定し
 4.第二画面の初期画面表示(initAppData)をすればいいです。

のようにします。
 第二画面では、共通領域から値をとってきて、それを表示します。

 ただ、こうすると、第一画面と第二画面、両方表示されてしまいます。
 第一画面は、消したいので、ここで、

   f.dispose();

 すればいいのですが、他のクラスから、第一画面を消したい場合もあるかもしれません。
 そこで、これをメソッドにすることにします。
 この処理は画面の最後にすることになるので、関数をBREWに合わせて
 freeAppData()とします。本当は何でもいいんですけど。。

(きのうのブログでfreeAppData()はない、とかきましたが、メモリを解放する、本来の意味でのfreeAppData()は確かにありません。ただ、最後に呼ぶべき関数という風に考えると、まあ、こいつをfreeAppData()ってしちゃってもいいかな。。と。。)




■第一画面の修正ソース
 そんなことを考慮して、第一画面を修正すると、こんな感じになります。
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class gamen1 {

	//	共通領域
	public HashMap	map = null;
	
	//	画面項目項目
	Frame 		f;
	Button		b1;
	Button		b2;
	TextArea	t1;

	/*
	 * 	表示
	 */
	public void initAppData()
	{

		//	フレームを作成する		
		f = new Frame("test");
		f.setSize(240,320);
		f.setLayout(null);

		//	アクションを作成する
		gamen1_HandleEvent al = new gamen1_HandleEvent();

		//	ラベル
		Label l1 = new Label("早うちの練習");
		l1.setLocation(10,30);
		l1.setSize(100,30);
		f.add(l1);

		Label l2 = new Label("これは、練習文です。");
		l2.setLocation(10,120);
		l2.setSize(150,30);
		f.add(l2);

		Label l3 = new Label("以下の文を打とう!");
		l3.setLocation(10,70);
		l3.setSize(100,30);
		f.add(l3);

		//	テキスト
		t1 = new TextArea();
		t1.setLocation(10,160);
		t1.setSize(150,80);
		f.add(t1);
		
		//	ボタン作成		
		b1 = new Button("挑戦する");
		b1.setLocation(120,70);
		b1.setSize(100,30);
		b1.addActionListener(al);
		f.add(b1);

		//	ボタン作成		
		b2 = new Button("打ち終わった!");
		b2.setLocation(10,250);
		b2.setSize(100,30);
		b2.addActionListener(al);
		f.add(b2);

		//	表示
		f.setVisible(true);

	}

	/*
	 * 	終了
	 */
	public void freeAppData()
	{
		f.dispose();
	}
		
	/*
	 * 	イベントリスナー
	 */
	private class gamen1_HandleEvent 
			implements ActionListener
	{

		/*
		 * 	ボタンが押されたときの処理
		 */
		public void actionPerformed(ActionEvent e)
		{

			Object o = e.getSource();

			if ( o.equals(b1)== true)
			{	//	挑戦する
				System.out.println("挑戦する");
				return;
			}

			if ( o.equals(b2)== true)	
			{	//	打ち終わった!

				//	共通領域への値設定
				map.put("username","ウィリアムのいたずら");
				map.put("sei_ritu","50");
				map.put("byo","20");
				
				//	第二画面表示
				gamen2 g2 = new gamen2();
				g2.map	=	map;
				g2.initAppData();

				//	消す
				freeAppData();
			}
		}
	}
}





■第二画面の新規ソース
 今回作る、第二画面は、こんな感じになります。
import java.awt.*;
import java.awt.event.*;
import java.util.*;


public class gamen2 {

	//	共通領域
	public HashMap	map = null;
	
	//	画面項目項目
	Frame 		f;
	Label 		l1;
	Label 		l2;
	Button		b1;
	Button		b2;

	/*
	 * 	表示
	 */
	public void initAppData()
	{

		//	画面間引数を受け取る		
		String usrename = "";
		String sei_ritu = "";
		String byo = "";
		if ( map	!=	null )
		{
			usrename	= (String)map.get("username");
			sei_ritu	= (String)map.get("sei_ritu");
			byo			= (String)map.get("byo");
		}

		//	フレームを作成する		
		f = new Frame("test");
		f.setSize(240,320);
		f.setLayout(null);

		//	アクションを作成する
		gamen2_HandleEvent al = new gamen2_HandleEvent();

		//	ラベル
		l1 = new Label(usrename + "さんの結果");
		l1.setLocation(10,30);
		l1.setSize(220,30);
		f.add(l1);

		l2 = new Label("正解率"+ sei_ritu + "%" +"時間" + byo + "秒");
		l2.setLocation(10,120);
		l2.setSize(220,30);
		f.add(l2);

		//	ボタン作成		
		b1 = new Button("再挑戦する");
		b1.setLocation(10,250);
		b1.setSize(100,30);
		b1.addActionListener(al);
		f.add(b1);

		//	ボタン作成		
		b2 = new Button("終了");
		b2.setLocation(130,250);
		b2.setSize(100,30);
		b2.addActionListener(al);
		f.add(b2);

		//	表示
		f.setVisible(true);

	}

	/*
	 * 	終了
	 */
	public void freeAppData()
	{
		f.dispose();
	}
		

	
	/*
	 * 	イベントリスナー
	 */
	private class gamen2_HandleEvent 
			implements ActionListener
	{

		/*
		 * 	ボタンが押されたときの処理
		 */
		public void actionPerformed(ActionEvent e)
		{

			Object o = e.getSource();

			if ( o.equals(b1)== true)
			{	//	挑戦する
				System.out.println("再挑戦する");

				//	第一画面表示
				gamen1 g1 = new gamen1();
				g1.map	=	map;
				g1.initAppData();

				//	消す
				freeAppData();
				return;
			}

			if ( o.equals(b2)== true)	
			{	//	打ち終わった!
				System.exit(0);
			}
		}
	}
}






なお、スタートのtest.javaには、変更はありません。
これで、起動すれば、あとはうまくいくはずです。

ただ、これ、BREWのときは、いいんですけど、
Windowsの場合、別にマルチウインドウだから、2つ出してもかまわない。
っていうことで、このシリーズでの次回は、マルチウィンドウのケースを考えます。
この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 農業用ロボットをケータイや... | トップ | 村の紹介コンテンツって、戦... »
最新の画像もっと見る

JavaとWeb」カテゴリの最新記事