#author("2020-06-26T16:31:37+09:00","default:takataka","takataka") #author("2020-06-29T18:00:55+09:00","default:takataka","takataka") *グラフィックス基礎及び実習 2020年度 第12回 [#e9701092] #contents //&color(#ff0000){''工事中''}; **ex12 課題A [#kadaiA] //&color(Red){''工事中''}; ''提出期限: 0626金%%16:50%% → 17:05'' 次のことをやりなさい. + Graphicsチーム上に置いてある G11OmikujiSample.jar をダウンロードして実行してみる. -- こちらにも置いときます &ref(https://www-tlab.math.ryukoku.ac.jp/~takataka/course/Graphics/G11OmikujiSample.jar,nolink); -- たいていの環境ではダウンロードしたファイルをダブルクリックして実行できると思いますが,うまくいかない場合,次のことを試してみてください +++ Macで「開発元が未確認のため開けません」のようなメッセージが出る場合は,「CTRLキーを押しながらクリック」(右クリック)して「開く」 +++ Win/Mac ともダブルクリックで開けない場合は,コマンドプロンプト/ターミナルで次のように実行してください. java -jar G11OmikujiSample.jar + Graphicsチーム上に置いてある G11Omikuji.java をダウンロードして実行してみる. -- 乱数を使っているので,何度か実行して結果を観察しましょう -- プログラムの実行を終了するには CTRL+C (コントロールキーを押しながら C を押す) + G11Omikuji を修正して,G11OmikujiSample と同様の動作をするようにしよう.Sample の大吉,吉,凶,大凶の確率は,それぞれ 0.4, 0.3, 0.25, 0.05 です.おみくじの種類と確率は Sample と同じにしてください.「大吉: 一歩進めば〜」といったメッセージの「一歩進めば〜」などの部分は好きにして構いません. + 完成したプログラムのソースファイルをこの科目の Moodle コース上の当該の場所へ提出してください. -- 上記ファイルは締切後に半自動的に処理します.コンパイルエラーになる,ファイル名が違う,といったことのないように注意すること.''ファイル名の間違い(大文字小文字も)に注意''. **ex12 課題B [#kadaiB] //&color(Red){''工事中''}; ''提出期限: 0626金18:20'' 以下の各Stepをやりましょう.授業の動画も参考に. *** Step1 [#xa31447c] + Graphics チーム上に置いてある CounterApp.java を入手する + そのままコンパイル&実行して動作確認する + イベント処理が実装されていないので,次の機能を実装する.変数 cnt を使うこと -- 「+1」ボタンを押すたびに表示される数が1ずつ大きくなるようにする -- 「Reset」ボタンを押すと表示される数が0になるようにうする ***Step2 [#r23ad893] + Graphics チーム上に置いてある CounterApp2.java を入手する + そのままコンパイル&実行して動作確認する + イベント処理の部分を修正して,Step1 のようにカウントできるようにする. -- Counter クラスのインスタンスを生成して使いましょう -- Counter クラスの中身をいじる必要はないはずです ***Step3 [#x104ece8] + Step2 の CounterApp2.java 中で TextField クラスのインスタンスを表す変数 tf を start メソッド内のローカル変数から CounterApp2 クラスのインスタンス変数へと変更する. つまり,start メソッド内の #pre{{ TextField tf = new TextField(String.valueOf(cnt.get())); }} という行を #pre{{ tf = new TextField(String.valueOf(cnt.get())); }} に変更して,適当な場所に以下の行を追加する. #pre{{ TextField tf; }} + 同様に,Counter クラスのインスタンスを表す変数も,CounterApp2 クラスのインスタンス変数へと変更する. + start メソッドの末尾に以下を追加する #pre{{ // tf でのイベント処理 tf.setOnAction((event)->{ procInput(); }); }} + CounterApp2 クラスに以下のメソッドを追加する.ただし,以下の変数名 cnt は,自分のプログラムで使っている変数名にあわせて修正すること. #pre{{ void procInput() { System.out.print("カウンタの値は "+cnt.get()); System.out.println(" テキストフィールドの文字列は "+tf.getText()); } }} + コンパイル&実行して動作確認する -- 2つのボタンを押したときの動作は Step2 と同様のはず -- テキストフィールドに適当にキー入力して Enter を押すと,procInput が実行されてその出力が表示されるはず *** Step4 [#r33a1adc] + procInput の中身(だけ)を修正して,次のことができるようにしなさい -- テキストフィールドに整数として解釈できる文字列が入力された場合,カウンタの値にそれをセットする(テキストフィールドに 4649 と入力して Enter を押したら,次に「+1」ボタンを押すと,表示は 4650 になるようにする). -- テキストフィールドに入力された文字列が整数として解釈できない場合は無視する(Enter押したらその直前のカウンタ値が表示される) + 完成したプログラムのソースファイル(''CounterApp2.java の方だけ'')をこの科目の Moodle コース上の当該の場所へ提出しなさい.このファイルは締切後に半自動的に処理します.コンパイルエラーになる,ファイル名が違う,といったことのないように注意すること.''ファイル名の間違い(大文字小文字も)に注意''. **ex12 課題C [#kadaiC] //&color(Red){''工事中''}; ''提出期限: 0702木23:59'' 次のことをやりましょう. + Graphics チームに置いてある MouseEventSample.java を入手する + コンパイル&実行して動作確認する + 講義資料 4/4 および講義動画で説明しているとおりプログラムを修正する + 完成したプログラムのソースファイルはこの科目の Moodle コース上の当該の場所へ提出してください. -- 上記ファイルは締切後に半自動的に処理します.コンパイルエラーになる,ファイル名が違う,といったことのないように注意すること.''ファイル名の間違い(大文字小文字も)に注意''. **ex12 課題S(omake) [#kadaiS] //&color(#ff0000){''工事中''}; 期限: 0702金23:59.これはおまけ課題です.やらなくても減点になりません.やったら加点かも [[G11MenuSample.jar>Graphics:G11MenuSample.jar]] 上記リンク先の jar ファイルをダウンロードして,実行してみよう. これと同じ動作をするプログラムを作ろう.ただし,次の指示に従うこと. - クラス名は G11Menu とする - 項目数が増減しても平気なように,配列をうまく使おう. ++ 次のようにファイル名と Image オブジェクトの配列を作ろう #pre{{ /* Image オブジェクトの配列の作成 */ String[] fns = { "pochittona.png", "blackuni.jpg", "whiteuni.jpg" }; Image[] imgs = new Image[fns.length]; for(int i = 0; i < imgs.length; i++){ imgs[i] = new Image(fns[i]); } }} ++ MenuItem も配列にしよう. ++ イベントハンドラの登録は,for文使って書こう. - これできたら課題Tも実は簡単.ぜひどうぞ. **ex12 課題T(omake) [#kadaiT] //&color(#ff0000){''工事中''}; 期限: 0702金23:59.これはおまけ課題です.やらなくても減点になりません.やったら加点かも [[G11TimerSample.jar>Graphics:G11TimerSample.jar]] 上記リンク先のクラスファイルをダウンロードしていつもの場所に置き,実行してみよう. 上記リンク先の jar ファイルをダウンロードしていつもの場所に置き,実行してみよう. これと同じ動作をするプログラムを作ろう.ただし,次の指示に従うこと. - クラス名は G11Timer とする - 課題S同様に配列を使おう - 次々画像が切り替わって表示される仕組みは,一定時間間隔でイベントを発生させるタイマーとそのイベント処理である.JavaFX でタイマーを使うには,以下を参考にしたらよい. -- http://tomasmikula.github.io/blog/2014/06/04/timers-in-javafx-and-reactfx.html の Periodic action のところ -- https://docs.oracle.com/javase/8/javafx/api/javafx/animation/Timeline.html -- 教科書 15.4.3 節