2000.6.7,2001.6.11 KPC 情報技術科 関谷
前回は、slsでの渦巻き模様(MoveとTurnでの練習問題56)をJavaに移植して、キー・イベント処理によるグラフィックスを実習した。
GlibwvのメソッドWindow() とView()を使って、パラメータの異なる描画を幾つか並べることなどができるようにしている(2次元の座標変換をしての描画)。このGlibwvクラスの描画メソッドを使うには、その描画の前に、Window() とView()メソッドを実行しておく必要がある。(2次元の座標変換のパラメータをセット)
アプレットで、ボタンやテキストフィールド、チョイスボタンなどを使用した。
中山のテキストの以下を参照した。あるいは、WebのJava関連のページでもよい。
4章GUIとレイアウトマネージャ(1.GUIとAWT 2.レイアウトマネージャなど)
5章 イベント処理(1.イベント階層 2.イベント処理2.1アクションイベント処理など)
ソースプログラムka_cap56.javaは、こちらを参照のこと。
C言語のプログラムでは、キー入力をMS-DOSプロンプトの窓でscanf()関数で行っていたが、appletでは、GUI部品のテキストフィールド、チョイスボタンなどを使用する。
(注)文字列から数値への変換( angle=Double.parseDouble(sta);)が、appletviewerでは出来ても、ブラウザではできないことが分かった。これは、チョイスボタンで使っていたものである。テキストフィールドでの変換方法に変えたものは、OKである。
3つの図を同時に表示するように改造した。(パラメータの配列での保存とviewの変更など)(起動時は、パラメータを変えた図を表示している。)
(パラメータは3つまでを順番に更新するようにした。)
再描画のボタンを追加し、このボタンをクリックしたときに再描画する。
Javaのプログラム構造を考察すること。(クラスやイベント処理)
そして、今回のMoveとTurnプログラムの改造をする。あるいは、逆の順序でも良いが。
テキストフィールドでの入力などがあるので、アプレットは、ブラウザで操作できるようにすること。(画面のイメージをリンクしても、キー入力によりパラメータを変えて、再描画ボタンでの描画などができない。)
C言語とJava言語との比較の考察も欲しい。
機能の違いでは、C言語のときには、スクリーン1枚ごとに書替えていたが、Javaでは、paintメソッドで、3枚を順番にだが再描画ボタンで1度に描くので、どのような工夫をしているだろうか?
3Dでの軸測投影を、C言語のプログラムでは、GUIではなく、コマンド・プロンプトの窓でのキー入力でパラメータを指定していた。
今日のJavaプログラムでは、マウスを使っての回転指示に変更した。
(注)山本芳人,Javaによる図形処理入門,工学図書,1998.3,pp.205-208などを参照した。Webページにも、これらのAppletがあり、イベント操作が体験できる。さらに、それらのJavaソースも見れる。
原点を固定して、マウスの水平方向のドラッグでの移動量で、y軸回りの回転量として、上下方向のドラッグでの移動量をx軸回りの回転量としている。移動の途中も描画をしているので、マウスの動きに追随している。なお、左側には、固定した軸測投影図を表示している。
ソースプログラムkace59m.javaは、こちらを参照のこと。
マウスイベント処理については、中山のテキスト(「Java2グラフィックスプログラミング入門」)の第5章 2.3マウスイベント処理などを参照のこと。マウスのイベントには、2種のリスナーがある。
C言語からJavaへの移植では、C言語の構造体データの扱いで苦労している。Javaでは、クラスにしてそのクラスの配列を作ればよいのだが、クラス配列の初期化が、単純に{ }で囲めないからだった。
newでオブジェクトを生成して、次にメンバ変数のデータを代入する必要がある。
このため、x座標、y座標などをそれぞれ、単純な配列にして、代入をしている。
軸測投影appletプログラムをまず、動かしてみる。次に中身を解析して、改造を行う。
このプログラムの動作確認や解析だけならば、このWebページから、できる。
改造するには、ファイルサーバからコピーして、編集・コンパイルなどをして各自のフォルダで動作させること。
ソースプログラムkace59m.java,HTMLファイルkace59m.htmlはファイルサーバi:\sekiya\図形処理にあるので、コピーして,氏名,addressタグなど編集する。( Glibwv.java、クラスファイルGlibwv.classについては、前回コピーしているので、同じフォルダならコピー不要である。)
各自のフォルダでの起動は、kace59m.htmlをダブルクリックするか、このhtmlファイルをappletviewerで起動する。
移植したグラフィックスライブラリGlibwv.class(ソースはGlibwv.java)についても、解析する。(前回の続きであるが。)
マウスによるイベント処理は、どのように行っているか?
印刷をするには、どうしたらよいか?
前回と同様で、appletタグを持つhtmlファイルへのハイパーリンクとする。(イメージの貼り付けは、マウスで動かせないから、プログラムの動作が出来ず不適当である。)