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 */