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

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

開発の初めから順番に書いていってみる その65:プログラミング(27)入出力の自動生成15

2007-06-20 12:29:15 | 開発ネタ

 シリーズ「開発の初めから順番に書いていってみる」の続きです。
 設計手順には、要求分析、外部設計、内部詳細設計・プログラミング、単体テスト、結合テスト、総合テスト、運用テスト及び運用とあります。
 現在プログラミングです。
(プログラミング以前は、ここ http://www.geocities.jp/xmldtp/index_kaihatsu.htm

 プログラミングでは決定表と自動生成のお話をします。
 今、画面の自動生成で、特にBREWの自動生成版とJavaの画面自動生成を共存させる形でのアプローチをしています。

 前回は、ソースと仕様書の関係で
  ・アプリ起動
  ・各画面
  ・各画面のイベントリスナーのクラス
の仕様書とソースがあることを示しました。

今回は、各画面の仕様書と雛形ソースです。




■各画面に関するソース
ここのgamen1.javaのうち、Shoriのところはいらないかなと。。
 また、画面の中にある再描画や終了処理は、BREWとの対応でここにかきましたが、実際にはイベントリスナー内のメソッドでやってもらったほうがいいかなと・・そー考えると、こんなかんじ・・

import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.events.*;

import java.util.*;

public class gamen1 {
	
	//	共通領域
	public HashMap	map = null;

	//	画面項目項目
	Display		ff;
	Button		b1;
	Button		b2;
	Text		t1;

	/*
	 * 	生成
	 */
	public gamen1(HashMap map)
	{
		this.map = map;
		map.put("gamen1",this);
		draw();
	}

	/*
	 * 	表示
	 */
	public void draw()
	{
		
		//	フレームを作成する		
		ff	=(Display)map.get("display");

		f.setText("test");
		f.setSize(240,320);
		f.setLayout(null);

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

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

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

		Label l3 = new Label(f,SWT.NULL);
		l3.setLocation(10,70);
		l3.setSize(100,30);
		l3.setText("以下の文を打とう!");
	
		//	テキスト
		t1 = new Text(f,SWT.NULL);
		t1.setLocation(10,160);
		t1.setSize(150,80);
		
		//	ボタン作成		
		b1 = new Button(f,SWT.NULL);
		b1.setLocation(120,70);
		b1.setSize(100,30);
		b1.addSelectionListener(al);
		b1.setText("挑戦する");

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

		//	表示
		f.open();
		DispAppData();

	   	// ウィンドウが破棄されるまでループ
    	         while (f.isDisposed() == false)
    	         {
      		    if (ff.readAndDispatch() == false)
      		    {
        		       ff.sleep();
      		    }
	         }
	}
}

(上記 < > ¥は、本当は半角)




■仕様書

 BREWの場合と違うのは、当時のBREWは、大体縦横幅が決まってました。
 しかし、今回のウィンドウは、縦横幅自由で、実際、
     f.setSize(240,320);
 で大きさを決めています。なので、この指定が必要です。
 それと、コントロール種別はTEXTCTLは、テキストボックスとしても、
他のものはありません。そこで、LABELとBUTTONを導入します。
 そうすると、こんなかんじ。

 セルF3,H3が縦横指定です。




■雛形ソース

そうすると、雛形ソースはこんな感じ
import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.events.*;

import java.util.*;

public class $#$CELL D2$#$ {
	
	//	共通領域
	public HashMap	map = null;

	//	画面項目項目
	Display		ff;
$#$REP 5$#$
$#$IFKETA C,BUTTON$#$
	Button		$#$KETA B$#$;
$#$IFEND$#$
$#$IFKETA C,TEXTCTL$#$	
	Text		$#$KETA B$#$;
$#$IFEND$#$
$#$REPEND A$#$

	/*
	 * 	生成
	 */
	public $#$CELL D2$#$(HashMap map)
	{
		this.map = map;
		map.put("$#$CELL D2$#$",this);
		draw();
	}

	/*
	 * 	表示
	 */
	public void draw()
	{
		
		//	フレームを作成する		
		ff	=(Display)map.get("display");

		f.setText("test");
		f.setSize($#$CELL F3$#$,$#$CELL H3$#$);
		f.setLayout(null);

		//	アクションを作成する
		$#$CELL D2$#$_HandleEvent al = new $#$CELL D2$#$_HandleEvent();

$#$REP 5$#$
$#$IFKETA C,LABEL$#$
		Label $#$KETA B$#$ = new Label(f,SWT.NULL);
		$#$KETA B$#$.setLocation($#$KETA D$#$,$#$KETA E$#$);
		$#$KETA B$#$.setSize($#$KETA F$#$,$#$KETA G$#$);
		$#$KETA B$#$.setText("$#$KETA H$#$");
$#$IFEND$#$
$#$IFKETA C,BUTTON$#$
		//	ボタン作成		
		$#$KETA B$#$ = new Button(f,SWT.NULL);
		$#$KETA B$#$.setLocation($#$KETA D$#$,$#$KETA E$#$);
		$#$KETA B$#$.setSize($#$KETA F$#$,$#$KETA G$#$);
		$#$KETA B$#$.addSelectionListener(al);
		$#$KETA B$#$.setText("$#$KETA H$#$");
$#$IFEND$#$
$#$IFKETA C,TEXTCTL$#$	
		//	テキスト
		$#$KETA B$#$ = new Text(f,SWT.NULL);
		$#$KETA B$#$.setLocation($#$KETA D$#$,$#$KETA E$#$);
		$#$KETA B$#$.setSize($#$KETA F$#$,$#$KETA G$#$);
$#$IFEND$#$
$#$REPEND A$#$

		//	表示
		f.open();
//		al.disp(map);

	   	// ウィンドウが破棄されるまでループ
    	         while (f.isDisposed() == false)
    	         {
      		    if (ff.readAndDispatch() == false)
      		    {
        		       ff.sleep();
      		    }
	         }
	}
}

(上記 < > ¥は、本当は半角)




■BREWとの共存
 縦横についてはBREWのときは見ないだけだから問題ないと思います。
 BREWのときにあったHTMLCTLがなくなり、BUTTON,LABELが追加された件ですが、BREWの場合、$#$IFKETA C,BUTTON$#$に、BUTTONやLABELがないので、その行は無視されます。
 同様に、JAVAのほうにHTMLCTLを書いても、無視されます。
 そのため、仕様書に、両方の場合のケースを書いておけば、雛形指定に応じて、それぞれにあった部品だけを選んで、ソースにするため、共存できます。




 ということで、各画面はおしまい。


この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« YouTube日本語版と携帯版 | トップ | 年金問題”社保庁誤入力の主犯... »
最新の画像もっと見る

開発ネタ」カテゴリの最新記事