#author("2021-06-26T13:31:03+09:00","default:takataka","takataka") #author("2021-06-26T13:31:56+09:00","default:takataka","takataka") *グラフィックス基礎及び実習 2020年度 第14回課題A,B [#e9701092] - [[第14回実習課題全体のページ>Graphics/2020/ex14]] - [[第14回実習課題A,Bのページ>Graphics/2020/ex14AB]] - [[第14回実習課題C,Dのページ>Graphics/2020/ex14CD]] #contents //&color(#ff0000){工事中}; //**注意 [#notice] **課題A,Bのための準備 [#o0bcb890] + サンプルをダウンロードして実行してみよう -- ''Graphics2020 フォルダ/ディレクトリ使ってるひと''は,以下をそこへダウンロード --- [[Graphics:HW3Sample.class]] --- [[Graphics:HW3PaneSample.class]] --- [[Graphics:hw3pane.css]] -- ''gr2020 プロジェクトのひと''は,以下をダウンロードして gr2020/lib に置く(実行はしなくてよい) --- [[Graphics:HW3Sample.jar]] + HW3Sample クラスの動作確認は,以下のプログラムでやったらよい. #pre{{ public class Test4HW3Sample { public static void main(String[] args){ HW3Sample p1 = new HW3Sample(); System.out.println("名前: " + p1.getName()); System.out.println("身長(cm): " + p1.getHeight()); System.out.println("体重(kg): "+p1.getWeight()); System.out.println("BMI: " + String.format("%.2f", p1.calcBMI())); System.out.println("判定: " + HW3Sample.getMessage(p1.calcBMI())); System.out.println(); HW3Sample p2 = new HW3Sample("ふがよ", 234.5, 50.0); System.out.println("名前: " + p2.getName()); System.out.println("身長(cm): " + p2.getHeight()); System.out.println("体重(kg): "+p2.getWeight()); System.out.println("BMI: " + String.format("%.2f", p2.calcBMI())); System.out.println("判定: " + HW3Sample.getMessage(p2.calcBMI())); System.out.println(); HW3.setBorder1(5.0); HW3.setBorder2(8.0); System.out.println("判定: " + HW3.getMessage(p2.calcBMI())); } } }} + 以下の内容のファイル G14HW3.java を作ろう. #pre{{ import javafx.application.Application; import javafx.stage.*; import javafx.scene.*; import javafx.scene.control.*; import javafx.scene.layout.*; public class G14HW3 extends Application { @Override public void start(Stage pstage) { HW3PaneSample hw3pane1 = new HW3PaneSample(); HW3PaneSample hw3pane2 = new HW3PaneSample(); HBox root = new HBox(hw3pane1, hw3pane2); root.getStyleClass().add("myPane"); Scene scene = new Scene(root); scene.getStylesheets().add("hw3pane.css"); pstage.setScene(scene); pstage.setTitle("G14HW3"); pstage.sizeToScene(); pstage.show(); } public static void main(String[] args) { launch(args); } } }} + G14HW3 を実行してみましょう.テキストフィールドに適当な文字・数字を入力して動作確認しよう. ちなみに,3つのクラスの関係は下図のようになってます(Sampleのついてないクラス名で説明しています). &ref(https://www-tlab.math.ryukoku.ac.jp/~takataka/course/Graphics/G14HW3.png,nolink); **課題A [#kadaiA] //&color(Red){''工事中''}; ''提出期限: 0710金 16:50'' 以下のAPI仕様を満たす HW3 クラスを作ろう - 以前に類似のクラス(HWやHW2)を作っているが,それらとは別に(拡張するのではなく)新規に作成すればよい. - ''練習のため,HW2.java などを見ないで一から作ってみることをおすすめします.'' - 適切な動作確認ができるように,main メソッドの中身を自分で考えて定義すること 完成したプログラムのソースファイル(HW3.java だけ)をこの科目の Moodle コース上の当該の場所へ提出してください.このファイルは締切後に半自動的に処理します.コンパイルエラーになる,ファイル名が違う,といったことのないように注意すること.ファイル名の間違い(大文字小文字も)に注意. ***HW3 クラスのAPI仕様 [#gd341f70] - ''コンストラクタ'' > :HW3()| 名前 "ほげお",身長 170.0[cm],体重 62.0[kg]のインスタンスを生成. :HW3(String n, double h, double w)| 名前 n,身長 h[cm],体重 w[kg]のインスタンスを生成. < - ''メソッド'' > :void setName(String n)| このインスタンスの名前を n にする. :void setHeight(double h)| このインスタンスの身長を h にする. :void setWeight(double w)| このインスタンスの体重を w にする. :String getName()| このインスタンスの名前の値を返す. :double getHeight()| このインスタンスの身長の値を返す. :double getWeight()| このインスタンスの体重の値を返す. :double calcBMI()| このインスタンスのBMIを計算して返す. &mathjax{ \textrm{BMI} = (\mbox{体重[kg]}) / (\mbox{身長[cm]}/100)^2}; :static String getMessage(double bmi)| bmi が Border1 未満,Border1 以上 Border2 未満,Border2 以上の三つの場合に応じた文字列を返す.戻り値は,順に "やせてんなぁ","ふつー","太ってる…かな?". < - ''フィールド'' > :static double Border1| BMIの境界値のうち小さい方.初期値は 20. :static double Border2| BMIの境界値のうち大きい方.初期値は 25. < **課題B [#kadaiB] //&color(Red){''工事中''}; - ''提出期限: 0717金 16:20(この課題の提出方法は,いつもとは違う形です.詳しくは授業中に説明します)'' - 課題Aのチェックを受けてokをもらったひとだけが提出できます 次のことをやりましょう. + HW3PaneSample と同様の動作をするプログラムを作る.クラス名は HW3Pane とする + G14HW3 で HW3PaneSample を使っているところを HW3Pane に書き換えて動作確認する 次のことに注意 - サンプルのようなレイアウトは,GridPane を使えば実現できる. -- HW3Pane は Pane のサブクラス...DoraPane と同じですね. DoraPane の場合は,コンストラクタ中で this.getChildren().add(canvas); して,これ(DoraPaneのインスタンス)に canvas を載せてました(cf. [[Graphics/2020/ex13#g9529a1f]]).HW3Pane の場合は,canvas のかわりに GridPane のインスタンスを載せる,そしてその GridPane のインスタンスには Label とか TextField とか載せる,と考えたらよいでしょう - 身長/体重のテキストフィールドのイベント処理では,double 型と解釈できない文字列が入力された場合の例外処理を行う必要がある.サンプルの動作を確認しよう.[[Graphics/2020/ex12#kadaiB]] で作った CounterApp2 が参考になるかも. - BMI のところは小数点以下2桁で値が表示されている.これを実現するためには,String クラスの format というクラスメソッドを使い, String.format("%.2f", double型の値) とすればよい.このメソッドの戻り値は String である. - イベント処理の際にテキストフィールドやラベルに setText することになるが,身長フィールドの処理と体重フィールドの処理重複する部分が大きいので,その部分を定義したメソッドを作って,それを呼ぶ形にするとすっきりするかも. #hr - [[第14回実習課題全体のページ>Graphics/2020/ex14]] - [[第14回実習課題A,Bのページ>Graphics/2020/ex14AB]] - [[第14回実習課題C,Dのページ>Graphics/2020/ex14CD]]