10/28 Java AWT の基本構造 (Frame クラスの継承 ) 演習課題資料以下のプログラムを完成せよ 共通課題 1.Frame を生成するプログラム // Frame クラスを継承して 終了ボタンのみを定義した クラスの定義 class WhiteWindow 1 { // Frame クラスの継承をする (Frame クラスの拡張 ) WhiteWindow (String title){ //Frame クラス ( 親クラス ) のコンストラクタを呼び出し Window タイトルを設定 2 (title); タイトル //Frame のサイズを設定 ( 起動時 Window の大きさの設定 ) 3 (200,200); // 終了ボタンのクリック時の動作を設定する addwindowlistener( new WindowAdapter(){ // アプリケーションの終了 ); 200 終了ボタン 200 //WhiteWindow アプリケーションのインスタンスを使用するメインクラス public class Kadai2009110401 { // タイトル付きの白い Window をメモリ上に作成する WhiteWindow ww = new WhiteWindow ("Java の窓 "); // メモリ上の Window を画面に見えるようにする ww.setvisible(true);
10/28 Java AWT の基本構造 (Frame クラスの継承 ) 演習課題資料 2.Frame に FlowLayout を適用して Label を貼るプログラム // Frame クラスを継承して // Window 内に Label を加えて 終了ボタンを定義 したクラスの定義 class LabelWindow 1 { // Frame クラスの継承をする (Frame クラスの拡張 ) //Label のインスタンスを宣言する private Label namelabel, birthlabel, numberlabel; // コンストラクタの定義 LabelWindow (String title){ //Frame クラス ( 親クラス ) のコンストラクタを呼び出し Window タイトルを設定 2 (title); //Frame のサイズを設定 ( 起動時 Window の大きさの設定 ) 3 (200,200); // 終了ボタンのクリック時の動作を設定する addwindowlistener( new WindowAdapter(){ // アプリケーションの終了 ); // Layout を FlowLayout に設定する 4 ; //Label を初期化する namelabel = 5 (" 名前 :****"); birthlabel = 5 (" 生年月日 :****"); numberlabel = 5 (" 学生番号 :*****"); // Label を Window 上に加える 6 (namelabel); 6 (birthlabel); 6 (numberlabel); Label //LabelWindow アプリケーションのインスタンスを使用するメインクラス public class Kadai2009110402 { // タイトルと Label 付きの Window をメモリ上に作成する LabelWindow rw = new LabelWindow ("Label とレイアウト "); // メモリ上の Window を画面に見えるようにする rw.setvisible(true);
10/28 Java AWT の基本構造 (Frame クラスの継承 ) 演習課題資料 追加課題 3.Button に動作を設定するプログラム class ButtonWindow 1 { // Frame クラスを拡張し ActionListener を実装する private Button btnoha, btntiwa, btnbanwa; // おはよう こんにちは こんばんわボタン private Button btnend, btninit; // 終了と初期化ボタン private Label messagelabel; // メッセージラベル ButtonWindow (String title){ // コンストラクタで UI を設定する 2 (title); // Frame クラスのコンストラクタ 3 (400,200); // Frame のサイズを設定 addwindowlistener(new WindowAdapter(){ ); // 全体を BorderLayout に設定 (Fram クラスのデフォルトは BorderLayout) 4 (new BorderLayout()); // 下地にパネルを 3 つ準備する Panel paue = 5 ; //north に配置予定 Panel panaka = 5 ; //center に配置予定 Panel pasita = 5 ; //south に配置予定 // FlowLayout にしてボタンを 3 つ配置 paue. 6 (new FlowLayout()); //3 つボタンを定義して paue に追加 btnoha = 7 (" おはよう "); btntiwa = 7 (" こんにちは "); btnbanwa = 7 (" こんばんわ "); NORTH パネル paue.add(btnoha); paue.add(btntiwa); paue.add(btnbanwa); CENTER パネル //Label を定義して panaka に追加 panaka. 6 (new FlowLayout()); SOUTH パネル messagelabel = 8 (" あいさつ "); panaka.add(messagelabel); // 初期化 と 終了 用のボタン定義して pasita に追加 pasita. 6 (new FlowLayout()); btninit = 7 (" 初期化 "); btnend = 7 ("End"); pasita.add(btninit); pasita.add(btnend); // 3 つのパネルをこの Window に追加 this.add(paue, BorderLayout.NORTH); this.add(panaka, BorderLayout.CENTER); this.add(pasita, BorderLayout.SOUTH); // ボタンにリスナーを設定 ( この Window 上の動作を登録 ) btnoha.addactionlistener(this); btntiwa.addactionlistener(this); btnbanwa.addactionlistener(this); btninit.addactionlistener(this); btnend.addactionlistener(this); パネルは 透明なシートのようなオブジェクト
10/28 Java AWT の基本構造 (Frame クラスの継承 ) 演習課題資料 // ボタンの動作定義 public void actionperformed(actionevent ae){ if(ae.getsource()==btnoha) messagelabel.settext(" おはよう "); if(ae.getsource()==btntiwa) messagelabel.settext(" こんにちは "); if(ae.getsource()==btnbanwa) messagelabel.settext(" こんばんは "); if(ae.getsource()==btninit) messagelabel.settext(" あいさつ "); if(ae.getsource()==btnend) public class Kadai2009110403 { ButtonWindow bw = new ButtonWindow (" あいさつボタン "); bw.setvisible(true);
10/28 Java AWT の基本構造 (Frame クラスの継承 ) 演習課題資料 4. ダイヤモンド図形を表示するプログラム以下のプログラムを完成させよ // パネルだけを定義するクラス 描画は このパネルに行う class ZukeiPanel extends Panel { private int w,h,cx,cy, r; // 幅 w 高さh 中心 cx cy 描画半径 r private int num; private int x[],y[]; public void paint(graphics g) { // getsize() 現在の Window の大きさ取得 Dimension d = getsize(); (0,0) w = d.width; // 領域の幅 h = d.height; // 領域の高さ y cx = 1 ; // 中心座標 x= 幅 2 cy = 2 ; // 中心座標 y= 高さ 2 // dr は もし cx>cy なら cy の値 *0.8 それ以外 cx*0.8 double dr =( cx>cy? cy : cx ) * 0.8; r = (int)dr; num = 10; // 頂点数は 10 x = new int[num]; y = new int[num]; double angle = 2.0 * Math.PI / num; for(int i = 0; i<num; i++){ 3 //10 個の頂点座標 (x[i],y[i]) を求める 4 // すべての頂点同士を線で結ぶ 中心 (cx,cy) cx=d.width/2 cy=d.heght/2 //Window だけを定義したクラス // 内部に 1 つだけ Panel を加える class Zukei extends Frame { private ZukeiPanel mainpanel; Zukei(String title){ super(title); setsize(500,500); addwindowlistener(new WindowAdapter(){ ); setlayout(new BorderLayout()); // 中パネル作成図形描画 mainpanel = new ZukeiPanel(); add(mainpanel, BorderLayout.CENTER); d.width(window 幅 ) 3 に記述する処理 (i=0) 初期角度 ang = i x[i]=cx+dr*cos(ang), y[i]=cy-dr*sin(ang) (i=1) ang =i*angle x[i]= cx+dr*cos(ang), y[i]=cy-dr*sin(ang) (i=2) ang = i* angle x[i]= cx+dr*cos(ang), y[i]=cy-dr*sin(ang) 以下同様に繰り返して座標計算 4 に記述する処理(2 重ループを利用する ) (i=0) (j=i+1) (x[i],y[i]) と (x[j],y[j]) で直線を引く (i=1) (j=i+1) (x[i],y[i]) と (x[j],y[j]) で直線を引く (i=2) (j=i+1) (x[i],y[i]) と (x[j],y[j]) で直線を引く 以下同様に繰り返す 2 点 (x0,y0) と (x1,y1) を結ぶ直線を引く命令 g.drawline(x0,y0,x1,y1); x d.height(window 高さ ) // アプリケーションのメインクラス //Window を作るクラスのインスタンスを生成する public class Kadai2009110404 { Zukei zukei = new Zukei(" ダイヤモンド図形表示 "); zukei.setvisible(true);