プログラムの 1 行目に以下のように自分の入れること // vm12345 杉崎えり子 情報科学 B 第 10 回 GUI 情報科学 B Info2/3 info10 今日のフォルダー作成 Example10_1.java 1
今日やること Windows などで見られるウィンドウを作 成して (GUI プログラム ) そこに実行結 果を表示させる 2
ウィンドウの作成 Java を使用してウィンドウの作成をしたい 3
金型 ドーナツ型 ワッフル型 たい焼き型 4
金型 小倉あん味 たい焼き型 チョコレート味 金型は同じだけれど 出来上がるものは様々 クリーム味 5
ウィンドウの作成 バックグラウンドがグレーのウィンドウ ウィンドウ型 バックグラウンドがピンクのウィンドウ ウィンドウ金型から様々な色のウィンドウを作成する 6
ウィンドウの作成 ウィンドウ型 ウィンドウ金型はJava ではJFrameと言う型名 クラス 既に準備されているクラスの一つ 今回は1 個のウィンドウを作成し そのウィンドウの名前をmyframeとする オブジェクト ( インスタンス ) クラス ( 型 ) からオブジェクト ( もの ) を作る JFrame myframe = new JFrame(); 型 ( クラス名 ) 変数 = new クラス名 (); 7
他のパッケージ内のクラスや他のパッケージ内のクラスやインターフェイスを参照するために利用を参照するために利用 import パッケージ名. ( ドット ) クラス名 ; import javax.swing.*; public class Example10_1{ public static void main(string[] args){ /* フレームを作成 */ JFrame myframe = new JFrame(); Main /* サイズを指定 */ myframe myframe.setsize(400, 300); JFrame Example10_1.java ウィンドウの作成 main 実行結果 基本形のウィンドウ作成と表示 myframe /* 終了処理を設定 */ myframe.setdefaultcloseoperation(jframe.exit_on_close); Example11_2.java /* 実際に表示する */ myframe.setvisible(true); Main をシンプルにしたい メソッド化 8 コピーして実施
ウィンドウの作成継承 import javax.swing.*; フレームを作成するクラスJFrameはjavax.swingというパッケージの中にあるので import 文を使って呼び出しておく これを書くことにより javas.swing.jframe をJFrameと簡単に書くことが可能になる myframe.setsize(400, 300); myframeの幅 400px 高さ300pxを設定 myframe.setdefaultcloseoperation(jframe.exit_on_close); X ボタンを押すとアプリケーションを終了させる myframe.setvisible(true); myframeを表示させる 9
Example10_1.java import javax.swing.*; ウィンドウの作成 main 基本形のウィンドウ作成と表示 public class Example10_1{ public static void main(string[] args){ /* フレームを作成 */ JFrame myframe = new JFrame(); Main /* サイズを指定 */ myframe myframe.setsize(400, 300); 実行結果 JFrame /* 終了処理を設定 */ myframe.setdefaultcloseoperation(jframe.exit_on_close); /* 実際に表示する */ myframe.setvisible(true); この部分をメソッド化 Example11_2.java 10 コピーして実施
ウィンドウの作成継承 1 ウィンドウの作成 JFrame クラスを拡張して Window クラスを作成 メソッド化 public class Window extends JFrame{ // コンストラクタ public Window() { // メイン public static void main(string[] args){ パネル作成 メイン JFrame クラスを継承して Window クラスを作成 (Jframe クラスの機能を追加するため ) Window myframe = new Window(); Window クラスから myframe オブジェクトを作成したらコンストラクタ (Window) を実施する
Example10_2.java import javax.swing.*; ウィンドウの作成継承 public class Example10_2 extends JFrame{ //JFrameの拡張 public Example10_2(){ // コンストラクタ 基本形のウィンドウ作成と表示 main setsize(400, 300); setdefaultcloseoperation(exit_on_close); setvisible(true); // 実際に表示する public static void main(string[] args){ Example10_2 myframe = new Example10_2(); Ex10_2 JFrame // 拡張されたフレームを作成 実行結果 Ex10_2 クラスから myframe オブジェクトを作成したらコンストラクタ (Ex10_2) を実施する Example11_2.java 12
ウィンドウの作成継承 import javax.swing.*; フレームを作成するクラスJFrameはjavax.swingというパッケージの中にあるので import 文を使って呼び出しておく これを書くことにより javas.swing.jframe をJFrameと簡単に書くことが可能になる public class Example10_1 extends JFrame{ Example10_1をJframeを継承して作ったことを宣言 public Example10_1(){ プログラムの初期状態を設定するためのメソッド メソッド名はクラス名と同じにすること ( コンストラクタ ) myframe.setsize(400, 300); myframeの幅 400px 高さ300pxを設定 13
ウィンドウの作成継承 myframe.setdefaultcloseoperation(jframe.exit_on_close); X ボタンを押すとアプリケーションを終了させる myframe.setvisible(true); myframe を表示させる Example10_1 myframe = new Example10_1(); Main の中で Example10_1 クラスのオブジェクトを生成し myframe に代入 14
ボタンの作成 文字列を表示するために JLabel クラス ( 型 ) を用いて label オブジェクトを作成 ボタンを作成するために JButton クラス ( 型 ) を用いてオブジェクトを作成 15 追記して実施
Example10_2.java に追記 ボタンの作成 import javax.swing.*; import java.awt.*; //BorderLayout() を使うために赤字が追加部分 public class Example10_2 extends JFrame{ JLabel label; //labelをjlabelで宣言 Example10_2クラス内でlabel 使用可 JButton button; //buttonをjbuttonで宣言 Example10_2クラス内でlabel 使用可 public Example10_2(){ setsize(400, 300); setdefaultcloseoperation(exit_on_close); テキストの水平方向配置位置 GUI 部品の配置位置 label = new JLabel("clicks",JLabel.CENTER); // ラベルを作る button = new JButton("Click Me!"); // ボタンを作る setlayout(new BorderLayout()); // レイアウトマネージャを指定 add(label, BorderLayout.CENTER); // ラベルを真ん中に配置 add(button, BorderLayout.SOUTH); // ボタンを下に配置 Ex10_2 setvisible(true); // 実際に表示する main label button public static void main(string[] args){ Example10_2 myframe = new Example10_2 (); JFrame JLabel JButton 16 追記して実施
ボタンの作成 import java.awt.*; BorderLayout を使用するために import label = new JLabel("clicks",JLabel.CENTER); Jlabel クラスを使ってラベルオブジェクトを生成 で囲まれる文字列を表示し Jlabel.CENTER で中央に表示 button = new JButton("Click Me!"); Jbutton クラスを使ってボタンオブジェクトを生成 で囲まれる文字列を中央に表示する setlayout(new BorderLayout()); BorderLayout はレイアウトマネージャで適当に配置してくれる add(label, BorderLayout.CENTER); ラベルを真ん中に配置 add(button, BorderLayout.SOUTH); ボタンを下に配置 実行結果 17
ボタンを押すイベント クリックされると数字がカウントアップする クリックする 18
2 ボタンの作成 ボタンにイベントの監視人をつける public class Button extends JFrame implements ActionListener { ボタンを押すイベント コンストラクタ public Button(){ addactionlistener(this); イベント public void actionperformed(actionevent e) { メイン public static void main(string[] args){ パネル作成 ボタンクリック時の処理 メイン ボタンクリック処理を行うために リスナーインタフェースを実装 ActionEvent オブジェクトを e という変数で使う クリックされたときの処理 アクションイベントが発生すると actionperformed が呼び出される Button myframe = new Button(); myframe オブジェクトを作成したらコンストラクタ (Button) を実施する
Example10_2.java に追記 ボタンを押すイベント import javax.swing.*; import java.awt.*; import java.awt.event.*; 赤字が追加部分 public class Example10_2 extends Jframe implements ActionListener { JLabel label; JButton button; int count = 0; public Example10_2(){ setsize(400, 300); setdefaultcloseoperation(exit_on_close); label = new JLabel("clicks",JLabel.CENTER); // ラベルを作る button = new JButton("Click Me!"); // ボタンを作る setlayout(new BorderLayout()); // レイアウトマネージャを指定 add(label, BorderLayout.CENTER); // ラベルを真ん中に add(button, BorderLayout.SOUTH); // ボタンを下に配置 setvisible(true); // 実際に表示する button.addactionlistener(this); 20 追記して実施
ボタンを押すイベント // イベントがあったらここに来る public void actionperformed(actionevent e) { // イベントがbuttonで起こっていたら if (e.getsource() == button) { count++; //countを増加 // ラベルの文字を換える (1 行のテキストを定義 ) label.settext(count + " clicks"); public static void main(string[] args){ Example10_2 myframe = new Example10_2 (); 21
ボタンを押すイベント public class Example11_2 extends Jframe implements ActionListener import { イベント処理の ActionListener の道具を使えるようにする button.addactionlistener(this); ボタンにイベントの監視人をつける public void actionperformed(actionevent e) { クリックを感知したら actionperformed メソッドを実行 どんなイベントが起こったかは e というオブジェクトで知らせる if (e.getsource() == button) { イベントの発生がどこで起こったか調べ button かどうか label.settext(count + " clicks"); かっこ内の数字と文字列を表示 実行結果 22
課題ボタンを押すイベント 1 クリックした回数表示 (Example10_2.java) に加え あと何回クリック可能か ( 残数 ) を表示するようにし なさい クリックする前の残数は 100 とする BorderLayout.NORTH Kadai10_1.java BorderLayout.SOUTH 今日は課題の提出はない 23
課題ボタンを押すイベント 2 カウントアップするボタン カウントダウンするボタン 0にクリアするボタンを作成し作動するプログラ ムを作りなさい BorderLayout.NORTH Kadai10_2.java BorderLayout.SOUTH BorderLayout.EAST 24
課題ボタンを押すイベント 3 下図のように 今日の占い を作成しなさい 結 果は 1~4 の乱数を発生させ 対応したものを 表示させる 1 のとき大吉 2 のとき中吉 3 のとき吉 4 のとき凶 Kadai10_3.java 乱数発生方法は次ページ参照 25
ヒント 乱数の発生方法 乱数の発生のさせ方 ( 変数 fortuneに1~4の乱数を代入する ) int fortune=new java.util.random().nextint(4); //0 以上 ~4 未満の乱数発 fortune++; // 変数 fortuneに1~4の乱数が格納される 表示方法 Switch 文を使って fortune の中身の 1~4 の値で判別させる 26