2001年6月09日更新(choice 文字列 からのdoubleへの変換) 関谷トップページへ CG2001 トップページへ   このアプレットの実行

ka_cap56.java 渦巻き模様(MoveとTurn)

/*  ka_cap56.java 渦巻き模様(MoveとTurn)p.359, 2000.5.29 
 3個のパラメータセットにより、キー入力を順番に保存する。
 slsとGlibwv.hによるWindowsプログラムの移植 1998.3.16 sekiya*/
//	2001.5.25	Date,	setColor,  Window size,  setBackground

import java.applet.Applet;  // Javaの言語パッケージ類
import java.awt.*;  		// Graphicsグラフィックスクラス
import java.lang.*;    		//
import java.lang.Math;		//  数学サブクラス
import java.lang.String;	//  ストリングクラス
import java.awt.event.*;	//(a) JDK 1.1 
import java.util.Date;		//  時間の取得

public class ka_cap56 extends Applet implements ItemListener, ActionListener  // Appletクラス
{									 //(b) JDK 1.1 
  Glibwv glibwv;
  double leng,				/* 辺の初期値 */
		angle= 89.0,		/* 回転角  */
		step=1.0;			/* 辺の減少値 */
	double array_a[] = {89.0, 73.0, 145.0};	/* 3枚分のデータの保管 */
	double array_s[] = {1.0, 2.0, 5.0}; 	/* 3枚分のデータの保管 */
	int kai_a = 0, kai_s = 0;	/* 保管データの添え字 */
 
   Choice aChoice;      // チョイス 
   Button butt;			// ボタン
	TextField tf_a, tf_s;		// テキストフィールド
	Label label_a, label_s;		// ラベル

   public void init() {  // アプレットロード時の初期化メソッド 

	  butt = new Button("再描画");
	  add(butt);
      butt.addActionListener(this);		// イベントリスナーを指定 
    		
      aChoice = new Choice();				//(c) チョイス 
      aChoice.addItem("73.0");				//(d) 選択項目の作成 
      aChoice.addItem("89.0");
      aChoice.addItem("90.0");
      aChoice.addItem("120.0");
      aChoice.addItem("122.0");
      aChoice.addItem("125.0");
      add(aChoice);							//(e) Choiceの追加 
      add(new Label("チョイス角度angle"));  //(f) ラベルの追加 
      aChoice.addItemListener(this);		//(g) JDK 1.1 
      
    	label_s = new Label("キー入力減少値(Enter要)");		// ラベル
    	add(label_s);
    		
		tf_s = new TextField(String.valueOf(step));			// テキストフィールド
		add(tf_s);
		tf_s.addActionListener(this);		  			// イベントリスナーを指定 

    	label_a = new Label("キー入力角度(Enter要)");		// ラベル
    	add(label_a);
    		
		tf_a = new TextField(String.valueOf(angle));		// テキストフィールド
		add(tf_a);
		tf_a.addActionListener(this);		  			// イベントリスナーを指定 
		setBackground(new Color(128,255,128)); // 背景色 

   } //end init 

   //========= JDK 1.1 イベント処理(チョイス) ======== 
   public void itemStateChanged(ItemEvent e) { 	//(h) JDK 1.1 
     if (e.getSource() == aChoice) { 			//(i) JDK 1.1 
        String sta=aChoice.getSelectedItem();	//(j) Itemの取出し 
//        angle=Double.parseDouble(sta);			//(k) 文字列から数字へ 
			Double buffer;						// 2001.6.9 sekiya for IE5 and NS
			buffer = Double.valueOf(sta);
			angle= buffer.doubleValue();  
        array_a[kai_a++] = angle;
        if (kai_a == 3) kai_a = 0;
     } 
   } //end itemStateChanged 

   public void actionPerformed(ActionEvent e) {
		Double buffer;
     if (e.getSource() == butt) { 
		repaint();                    		// paintの呼び出し 
     } 
		if (e.getSource() == tf_s) {		// イベントの選択
			buffer = Double.valueOf(tf_s.getText());	// 文字の取り出し
			step = buffer.doubleValue();       		//  数値に変える
			array_s[kai_s++] = step;				// 順番に保管する
        	if (kai_s == 3) kai_s = 0;				// 0,1,2の順番の繰り返し
	 	}
		if (e.getSource() == tf_a) {
			buffer = Double.valueOf(tf_a.getText());
			angle= buffer.doubleValue();  
			array_a[kai_a++] = angle;
        	if (kai_a == 3) kai_a = 0;
	 	}
   }

	public void paint(Graphics g){  // C 言語でのmain()の本体部分
		int vxl = 20, vxr = 220;
		int i;
		
		glibwv.Window(150., -100., 450., 400.);		// 描画領域(実数)

		Date d=new Date();			// 現在年月日・時刻の取得
		g.drawString(d.toString(),420,50);	// dを文字列に変換して表示
		
	    g.drawString("<河西、moveとturn(c言語によるはじめてのアルゴリズム入門、",20,50);
    	g.drawString("練習問題56 渦巻き模様、pp.359-360> by 関谷、2000.5.29",20,65);

		for (i = 0; i <3; i++){					// 3回の描画

			if(i==0) g.setColor(Color.magenta);		// 文字や線の色の設定
			else if(i==1)  g.setColor(Color.orange);
			else  g.setColor(Color.blue);

	    	angle = array_a[i];					// 角度の設定
	    	g.drawString("図の角度:"+ String.valueOf(angle), vxl, 80);

    		step = array_s[i];					// 減少値の設定
	    	g.drawString(", 減少値:"+ String.valueOf(step), vxl+11*8, 80);
			
			glibwv.View(vxl, 0, vxr, 400); 		// ビューポート(整数)の設定
			vxl += 200; vxr += 200;				// next view x range
			
			glibwv.SetPoint(200.,320.);			// 始点に行く
			glibwv.SetAngle(0.);				// 方向を決める
			leng = 200.0;						// 最初の動く長さ
			while (leng > 10.0) {
				glibwv.Move(g, leng);			// 進む
				glibwv.Turn(angle);				// 回る
				leng -= step;					// 次の長さを減らす
			}
		}
	} /* end of paint */
} /* end of class ka_cap56.java */