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