REPORT#5

1. 偶数奇数判定プログラム(GUIaa)をタイプし、その動作を考察せよ。

import java.awt.*;             //GUIコンポーネントを使う為に必要
import java.awt.event.*;           // アクションリスナー(イベント処理)を使うのに必要

public class Report7_GUIaa extends Frame{               //Frameクラスを継承
    Button    b0 = new Button("Even/Odd?");          //Buttonの宣言と初期化
    Label     x0 = new Label("Type a number and press...");  //Labelの宣言と初期化   
    TextField t0 = new TextField();              //TextFieldの宣言と初期化

    public Report7_GUIaa() {                  //コンストラクタ
        setLayout(null);                  // コンポーネント配置方法を絶対位置指定
        add(t0); t0.setBounds(10, 40, 90, 30);             //t0の位置設定(x=10,y=40,幅=90,高さ=30)
        add(b0); b0.setBounds(110, 40, 100, 30);      //b0の位置設定(x=110,y=40,幅=100,高さ=30)
        add(x0); x0.setBounds(10, 80, 180, 30);      //x0の位置設定(x=10,y=80,幅=180,高さ=30)

        b0.addActionListener(new ActionListener() {                //b0(ボタン)のアクションリスナー
            public void actionPerformed(ActionEvent evt) {        //b0が押されたときに実行されるメソッド
                int i = (new Integer(t0.getText())).intValue();   //TextField [t0]から文字列を取得しint型iに代入
                t0.setText("");

                if(i % 2 == 0) {                 //偶数ならば
                    x0.setText(i + " is Even");
                } else {                              //奇数ならば
                    x0.setText(i + " is Odd");
                }
            }
        });
    }
    
    public static void main(String[] args) {
       Frame win = new Report7_GUIaa();            //windowの生成
       win.setSize(200, 150); win.setVisible(true);           //windowの大きさを幅200.高さ150にする
       win.addWindowListener(new WindowAdapter() {      //windowの表示
           public void windowClosing(WindowEvent evt) {    //windowを閉じたら
               System.exit(0);                //アプリケーションを終了させる
           }
       });
    }
}
考察
import java.awt.*;0
import java.awt.event.*;
      「import」について

「import」とは既存のパッケージに含まれるクラスを利用する時に使うもの。
「import」の構文は import パッケージ名.クラス名 である。
AWTのコンポーネントとイベント処理を行う為に必要なパッケージをインポートしています。こうすることで短い名前(ButtonやLabalだけ)でクラスやメソッド等を扱うことができるようになります。 
    public class Report7_GUIaa extends Frame{……}
    
      「extends」について

「extends」とは2つのクラス間に継承関係を形成するときに使う。
「extends」の構文は class clsName2 extends clsName1{} となり clsName1はclsName2のスーパークラスと言う意味になる。
 Frameクラスを継承してウインドウを作成出来るようにしています。
Button b0 = new Button("Even/Odd?");
Label x0 = new Label("Type a number and press...");
TextField t0 = new TextField();
ボタン、ラベル、テキストフィールドの生成
Button Label TextFieldはコンポーネントと呼ばれるGUI部品
setLayout(null);
add(t0); t0.setBounds(10, 40, 90, 30);
add(b0); b0.setBounds(110, 40, 80, 30);
add(x0); x0.setBounds(10, 80, 180, 30);
ウインドウを生成したときに呼び出されるコンストラクタ内にあるため、この記述でウインドウにコンポーネントを配置することになります。
 add()はコンポーネントを追加、setLayout()はレイアウトモードの指定、 setBounds()はコンポーネントの配置場所を指定するメソッドです。
レイアウトモードとは、コンポーネントの配置方法を指定するものでいくつもありますが、今回は「null」を使います。これはコンポーネントを絶対位置で指定する方法で、setBoundsでコンポーネントの配置場所を指定します。
cName.setBounds(x , y , width , height) 
cName → コンポーネント名
x → x座標
y → y座標
width → コンポーネントの幅
height → コンポーネントの高さ
これはsetLayout(null)の時にしか使えません。他のレイアウトモードではこ の記述をしても無効になります。
b0.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
int i = (new Integer(t0.getText())).intValue();
x0.setText("");
if(i % 2 == 0) {
x0.setText(i + " is Even");
} else {
x0.setText(i + " is Odd");
}
} });
ボタン(b0)を押したときテキストフィールドの文字列を読み取り、数字に変換し て、偶数か奇数かを判定、その後ラベルに文字列を表示
ボタンが押されたときに発生するイベントを受け取るためのリスナ ActionListenerにボタンを登録(addActionListener)。
ActionPerformedメソッドは、リスナに登録されたボタンが押されたときに呼び 出されるメソッドです。ここにボタンが押された際の処理を記述する。
この書き方は「無名内部クラス方式」と呼ばれています。
public static void main(String[] args) {
Frame win = new GUIaa();
win.setSize(200, 150);
win.setVisible(true);
win.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
System.exit(0);
}
});
}
mainメソッドです。ウインドウを作成し、大きさを指定(setSize(200,150))、画 面にウインドウを表示(setVisible(true))しています。
WindowAdapterはWindowListenerの抽象メソッドをすべて空の内容で実装した クラスです。アダプタクラスと呼ばれます。
WindowListenerはインターフェースであり、複数の抽象メソッドがある。
すべての抽象メソッドをオーバーライド(上書き記述)しないといけない。
System.exit(0)はプログラムを終了させるメソッドです。正常に終了をしたことを示す場合は引数に0を、異常終了したことを示す場合には0以外の数値を引数に渡すことが通例となっている。