#author("2021-06-18T17:53:44+09:00","default:takataka","takataka") #author("2021-06-19T15:57:28+09:00","default:takataka","takataka") *グラフィックス基礎及び実習 2021年度 第11回 実習と宿題 [#e9701092] #contents //&color(#ff0000){''工事中''}; //**注意 [#notice] **実習課題A 締切: 当日13:30 [#kadaiA] &color(#00a000){''以下のことをやって,作ったソースファイルを moodle の該当の場所へ提出してください.''}; ファイル名の間違いに注意 ''以下で使っているソースファイルは,Graphics チーム上に置いてあります.そちらの「ch05. 全般的な質問用」チャネルの「実習用のファイル等の配布場所」という記事を参照してください.'' *** Step1 [#xa31447c] + ソースファイル CounterApp.java を入手する + そのままコンパイル&実行して動作確認する + イベント処理が実装されていないので,次の機能を実装する.変数 cnt を使うこと -- 「+1」ボタンを押すたびに表示される数が1ずつ大きくなるようにする -- 「Reset」ボタンを押すと表示される数が0になるようにうする ***Step2 [#r23ad893] + ソースファイル 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 の方だけ'')を提出しましょう **実習課題B 締切: 当日16:00 [#kadaiB] &color(#00a000){''以下のことをやって,作ったソースファイルを moodle の該当の場所へ提出してください.''}; ファイル名の間違いに注意 &color(#00a000){''以下のことをやって,作ったソースファイルを moodle の該当の場所へ提出してください.''}; ファイル名の間違いに注意.&color(red){''「おみくじ」だから Omikuji です.0mikuji ではありません.''}; //&color(red){''ソースファイルの入手法については別途説明します''(工事中)}; (1) &ref(https://www-tlab.math.ryukoku.ac.jp/~takataka/course/Graphics/G11OmikujiSample.jar,nolink); をダウンロードして実行してみる. > + ファイルをダウンロード. -- 「この種類のファイルはコンピュータに損害を与える可能性があります」のように言われるかもしれません.この授業のページからダウンロードしようとしてることを確認の上で先へ進めましょう. Graphics チーム上にも同じファイルが置いてあります. -- ダウンロードしたファイルはどこにあってもよいですが,整理のためGraphics20XYフォルダに置いとくのがよいでしょう + 実行.たいていの環境ではダウンロードしたファイルをダブルクリックすれば実行できます.うまくいかない場合,次のことを試してみてください -- Macで「開発元が未確認のため開けません」のようなメッセージが出る場合は,「CTRLキーを押しながらクリック」(右クリック)して「開く」 -- Win/Mac ともダブルクリックで開けない場合は,コマンドプロンプト/ターミナルで次のように実行してください. java -jar G11OmikujiSample.jar + jar ファイルというのが何者か興味があるひとは,教科書 p.223 参照 < (2) 上記サンプルと同じことをするプログラムを作ろう.クラス名は G11Omikuji, ソースファイル名は G11Omikuji.java とすること.ただし,次の仕様のメソッド draw を定義して呼び出すように作りましょう: > :static String draw()| 呼ばれるたびにランダムに "大吉: 一歩進めば前進するでしょう" 等の文字列を返す.ただし,大吉,吉,凶,大凶の確率は,それぞれ 0.4, 0.3, 0.25, 0.05 とする. < - くじの種類を変えたり確率を変えたりしたくなるかもですが,チェックが難しくなるので,''提出するもののくじの種類と確率はサンプルにあわせてください.'' 末吉追加とか大凶確率を0.99にするとかそういうのは提出版とは別に個人で楽しんでね.「一歩進めば〜」などの部分は好きにして構いません. - ''ウィンドウ幅が小さくて文字列が隠れるのを避けるため,「引く」ボタンと「どんなん?」ボタンそれぞれの prefWidth プロパティの値を 200 と 100 以上にしよう.'' **宿題 [#hw] &color(#00a000){''次回授業までに必ずやっておくこと''}; 次回の授業の資料(PDFや動画)等は [[こちら>../../2021#ex12]] からどうぞ. + 講義資料を入手.紙でほしい方は各自で印刷してください. > キャンパス内各所に設置されたプリンタで印刷することもできます.くわしくは「ポータル > 情報環境 > マニュアル > [[印刷利用マニュアル>https://www.media.ryukoku.ac.jp/local/manual/printsystem_manual.pdf]]」参照. < + 授業動画を視聴する > 学内の実習室等に設置の PC ではスピーカから音が出ませんので,イヤフォン/ヘッドフォンを用意する必要あり < + 講義資料・授業動画に出てくるプログラムを実際に作って実行してみる **実習課題S(omake) 締切: 次回実習時間終了時 [#kadaiS] &color(#00a000){''これはおまけ課題です.やらなくても減点になりません.やったら加点かも''}; (moodle の「おまけ課題」のところに,「自由課題」というのを書いときました.よかったら見てね) //&color(#ff0000){''工事中''}; [[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も実は簡単.ぜひどうぞ. **実習課題T(omake) 締切: 次回実習時間終了時 [#kadaiT] &color(#00a000){''これはおまけ課題です.やらなくても減点になりません.やったら加点かも''}; (moodle の「おまけ課題」のところに,「自由課題」というのを書いときました.よかったら見てね) [[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 節