トップ->Java Applet入門

Java入門内検索

目次
Javaトップ
0. はじめに

1. Javaの基礎
   1. コンパイル方法・実行方法
   2. 予約語
   3. 構成
   4. データの型と宣言
   5. 定数と変数
   6. 簡単な演算
   7. ディスプレイへの表示
   8. 文字列

2. 制御文
   1. 順次構造
   2. 単一分岐
   3. 多重分岐
   4. ケース構造
   5. 反復構造(while)
   6. 反復構造(do)
   7. 反復構造(for)
   8. 補助制御文
   9. 練習問題
   10.練習問題
   11.多重ループの抜け方

3. 配列
   1. 配列とは
   2. 配列の宣言と初期化
   3. 配列の使用法
   4. 練習問題
   5. 2次配列と多次元配列
   6. 練習問題

4. クラスの基礎
   1. クラスとは
   2. クラスの作成
   3. コンストラクタ
   4. 例題
   5. 演算子==とequalsメソッド

5. 演算子
   1. 演算子の種類
   2. インクリメント演算子とデクリメント演算子
   3. 複合代入演算子
   4. ビット演算子
   5. シフト演算子
   6. キャスト演算子
   7. 順次演算子
   8. 条件演算子(三項演算子)
   9. instanceof演算子
   10.演算子の優先順位
   11.式と値
   12.条件式と値
   13.練習問題

6. オブジェクト指向とは
   1. オブジェクト指向とクラス
   2. 継承
   3. カプセル化
   4. ポリモーフィズム

7. クラス
   1. thisキーワード
   2. public, protected, private
   3. 静的変数・静的メソッド・静的ブロック
   4. ローカル変数
   5. メソッドの引数
   6. null
   7. 練習問題
   8. インナークラス(内部クラス)
   9. 無名インナークラス(無名内部クラス)
   10. クラスの包含
   11. 練習問題

8. 継承
   1. 継承とは
   2. スーパークラスのコンストラクタ
   3. 継承とキャスト
   4. スコープ
   5. クラスの作成
   6. abstract
   7. 例題)お絵かきソフト
   8. 継承と包含

9. インターフェース
   1. インターフェースとは
   2. インターフェースの宣言
   3. インターフェースの参照
   4. インターフェースの修飾子
   5. インターフェースの継承
   6. インターフェースとinstanceof演算子

10. パッケージ
   1. パッケージとは
   2. パッケージの宣言
   3. クラスパス
   4. import

11. 例外
   1. 例外とは
   2. 例外が起きたら
   3. 例外の種類
   4. catchブロックの検索
   5. throw
   6. throws
   7. エラーと例外
   8. 独自の例外

12. マルチスレッド
   1. スレッドとは
   2. スレッドのライフサイクル
   3. スレッドの作成(Threadクラス)
   4. Threadクラスのメソッド
   5. スレッドの作成(Runnableインターフェース)
   6. 同期
   7. デッドロック
   8. スレッド間の通信

13. ガーベージコレクター
   1. ガーベージコレクターとは
   2. ガーベージコレクターの実行
   3. finalize

14. 有用な(?)クラス群
   1. Math
   2. Random
   3. System
   4. Vector
   5. Stack
   6. Hashtable
   7. Enumeration
   8. String
   9. StringTokenizer
   10. Object
   11. Number
   12. Byte
   13. Short
   14. Integer
   15. Long
   16. Float
   17. Double
   18. BigInteger
   19. BigDecimal
   20. Character
   21. Date
   22. Calendar

15. 入出力
   1. ファイルとディレクトリ
   2. ストリームの種類
   3. 文字ストリーム
   4. Reader
   5. CharArrayReader
   6. StringReader
   7. InputStreamReader
   8. FileReader
   9. BufferedReader
   10. Writer
   11. CharArrayWriter
   12. StringWriter
   13. OutputStreamWriter
   14. FileWriter
   15. PrintWriter
   16. BufferedWriter
   17. バイトストリーム
   18. InputStream
   19. ByteArrayInputStream
   20. FileInputStream
   21. FilterInputStream
   22. BufferedInputStream
   23. DataInputStream
   24. OutputStream
   25. ByteArrayOutputStream
   26. FileOutputStream
   27. FilterOutputStream
   28. BufferedOutputStream
   29. PrintStream
   30. DataOutputStream
   31. ランダムアクセスファイル
   32. スレッド間通信
       PipedInputStream
       PipedOutputStream
   33. クラスの保存
       ObjectInputStream
       ObjectOutputStream
       Serializable
   34. StreamTokenizer
   35. 標準入出力
       キーボードからの入力(標準入力)
       標準出力
       標準エラー出力
   36. 練習問題

16. ネットワーク
   1. インターネットアドレス
   2. TCP/IP通信
   3. UDP通信
   4. URL
   5. 練習問題
   6. マルチキャスト
   7. RMI

17. 中間試験
   1. 問題:Webサーバーを作りなさい
   2. HTTPプロトコル
   3. クラス設計
   4. 解答例

18. AWT
   1. AWTとは
   2. Component
   3. Container
   4. Frame
   5. Button
   6. レイアウト
   7. BorderLayout
   8. FlowLayout
   9. GridLayout
   10. CardLayout
   11. nullレイアウト
   12. イベントとイベントリスナー
   13. ActionListener
   14. Panel
   15. Label
   16. CheckBoxとItemListener
   17. CheckBoxGroup
   18. Choice
   19. List
   20. TextFieldとTextListener
   21. TextArea
   22. ScrollbarとAdjastmentListener
   23. Canvas
   24. 練習問題(計算機)
   25. Point
   26. Dimension
   27. Color
   28. Font
   29. Graphics
   30. 練習問題
   31. 練習問題
   32. ダブルバッファ
   33. イベント その2
       ActionEvent
       ItemEvent
       AdjustmentEvent
   34. KeyListenerとKeyEvent
       InputEvent
   35. MouseListenerとMouseEvent
   36. MouseMotionListener
   37. FocusListenerとFosusEvent
   38. WindowListenerとWindowEvent
   39. ComponentListenerとComponentEvent
   40. ContainerListenerとContainerEvent
   41. アダプタクラスとインナークラス
   42. 無名インナークラス
   43. 練習問題 お絵かき
   44. WindowとDialog、FileDialog
   45. メニュー
   46. ポップアップメニュー
   47. ショートカット
   48. カーソル

19. Java Applet
   1. Java Appletとは
   2. 最初のJava Applet
   3. Appletクラス
   4. Appletクラスのライフサイクル
   5. AppletContext
   6. イメージ
   7. パラメーター
   8. 練習問題 スライドショー
   9. Jarファイル
   10. 練習問題 時計

20. その他のチップス
   1. Javaから別のプログラムを実行させる
   2. StringBuffer
   3. 環境変数の取得
   4. 基数表記
   5. インスタンスのコピー
   6. 値渡しと参照渡し
   7. クラスオブジェクトの比較

21. 修了試験 ↓これより下は工事中です。
   1. 考え中
   2. 考え中
   3.
   4.

22. そしてその後は・・・
   1. ヒューマンアカデミー Javaプログラマー本科
   2. Appli-Style.com iアプリ作成に挑戦
   3. SJC-A 受験チケット申込


・ このページの先頭に戻る
・ トップページに戻る



・ このページの先頭に戻る
・ トップページに戻る

トップ-> Java入門:18章 AWT-> 24.練習問題

←前ページへ :  トップへ :  次ページへ→

24. 練習問題(計算機)

  仕様はお任せしますが、計算機を作ってみてください。



import java.awt.*;
import java.awt.event.*;

class Calc implements ActionListener{
    Button btn[]     = new Button[10];
    Button btnMinus  = new Button("-");
    Button btnPlus   = new Button("+");
    Button btnMul    = new Button("*");
    Button btnDiv    = new Button("/");
    Button btnDot    = new Button(".");
    Button btnEqual  = new Button("=");
    Button btnClear  = new Button("C");
    Button btnCE     = new Button("CE");
    Button btnBack   = new Button("BS");
    Button btnDummy1 = new Button("");
    TextField txtAnswer = new TextField("0");
    TextField txtInput  = new TextField("");
    int       sig;

    static final int NONE   = 0;
    static final int MINUS  = 1;
    static final int PLUS   = 2;
    static final int MUL    = 3;
    static final int DIVIDE = 4;

    public Calc(){
        /* フレームを作成します。*/
        Frame frm = new Frame();

        /* レイアウトを設定します。*/
        frm.setLayout(new BorderLayout());

        /* フレームのサイズを設定します。*/
        frm.setSize(new Dimension(200,200));

        /* パネルを作成します。*/
        Panel pnl1 = new Panel();
        Panel pnl2 = new Panel();

        /* 各パネルのレイアウトを設定します */
        pnl1.setLayout(new GridLayout(2,1));
        pnl2.setLayout(new GridLayout(5,4));

        /* 数字ボタンを作成し、リスナー登録 */
        for(int i = 0 ; i < btn.length ; i++ ){
            btn[i] = new Button((new Integer(i)).toString());
            btn[i].addActionListener(this);
        }

        /* パネルにボタンとテキストフィールドを追加します。 */
        pnl1.add(txtInput);
        pnl1.add(txtAnswer);
        pnl2.add(btnBack);
        pnl2.add(btnCE);
        pnl2.add(btnClear);
        pnl2.add(btnEqual);
        pnl2.add(btn[7]);
        pnl2.add(btn[8]);
        pnl2.add(btn[9]);
        pnl2.add(btnDiv);
        pnl2.add(btn[4]);
        pnl2.add(btn[5]);
        pnl2.add(btn[6]);
        pnl2.add(btnMul);
        pnl2.add(btn[1]);
        pnl2.add(btn[2]);
        pnl2.add(btn[3]);
        pnl2.add(btnMinus);
        pnl2.add(btn[0]);
        pnl2.add(btnDummy1);
        pnl2.add(btnDot);
        pnl2.add(btnPlus);

        /* 領域を確保するだけのダミーボタンは非表示にします。*/
        btnDummy1.setVisible(false);

        /* リスナーに登録します。*/
        btnMinus.addActionListener(this);
        btnPlus .addActionListener(this);
        btnMul  .addActionListener(this);
        btnDiv  .addActionListener(this);
        btnDot  .addActionListener(this);
        btnEqual.addActionListener(this);
        btnClear.addActionListener(this);
        btnBack .addActionListener(this);
        btnCE   .addActionListener(this);

        /* テキストフィールドは編集不可とします。*/
        txtInput.setEditable(false);
        txtAnswer.setEditable(false);

        /* パネルをフレームに登録します。*/
        frm.add(pnl1, BorderLayout.NORTH);
        frm.add(pnl2, BorderLayout.CENTER);

        /* フレームを表示させます。*/
        frm.setVisible(true);

        /* ダミーボタンがあった場所は背景が白なので、グレーに変えます。*/
        /* この部分の解説は後述します。*/
        frm.setBackground(btnDummy1.getBackground());
    }

    /* ボタンが押された場合に呼ばれるメソッドです。*/
    /* 通常、ここは押されたボタンを判断して、メソッドを呼ぶだけにとどめます。*/
    /* ここですべてのボタンの処理を書き込むと長くなってプログラムのメンテナンス性が落ちるからです。*/
    public void actionPerformed(ActionEvent e){
        /* 本来ならばキャスト可能かをinstanceof演算して確認するか、try〜catchします。*/
        Component c = (Component)e.getSource();

        if( c == btnMinus )
            minus();                  /* -(減算)ボタン*/
        else if( c == btnPlus )
            plus();                   /* +(加算)ボタン*/
        else if( c == btnMul )
            mul();                    /* *(乗算)ボタン*/
        else if( c == btnDiv )
            divide();                 /* /(除算)ボタン*/
        else if( c == btnEqual )
            equal();                  /* =ボタン*/
        else if( c == btnBack )
            backspace();              /* BS(バックスペース)ボタン*/
        else if( c == btnClear )
            clear();                  /* C(すべてクリア)ボタン*/
        else if( c == btnCE )
            ce();                     /* CE(入力した数値のみクリア)ボタン*/
        else if( c == btnDot )
            period();                 /* .(小数点)ボタン*/
        else
            number((Button)c);        /* 数字ボタン*/
    }

    /* 数字キーが押された場合 */
    private void number(Button b){
        /* 最初に0は受け付けない */
        if( b == btn[0] && txtInput.getText().length() == 0 )
            return;

        /* 計算が終了している時に、次の数字が押されたら結果領域をクリアする */
        if( sig == NONE )
            txtAnswer.setText("");

        /* 入力領域に数字を入れる */
        txtInput.setText( txtInput.getText() + b.getLabel() );
    }

    /* ピリオド(小数点)が押された場合 */
    private void period(){
        /* 数値の最初にピリオドが入れられたら、"0."と表示する。 */
        if( txtInput.getText().length() == 0 ){
            txtInput.setText("0");
        }

        /* すでに小数点が入力されていなければ、ピリオドを追加する */
        if( txtInput.getText().indexOf('.' ) == -1 ){
            txtInput.setText( txtInput.getText() + "." );
        }
    }

    /* +,-, /, * =が押された場合に呼ばれる計算するメソッド */
    double calculate(double an, double in, int sig){
        switch(sig){
        case MINUS :
            return an - in;
        case PLUS :
            return an + in;
        case MUL :
            return an * in;
        case DIVIDE :
            return an / in;
        }
        /* sigが四則計算以外の場合 */
        /* ここに来るのはプログラムミスの時。*/
        /* これを追加しないとコンパイラでエラーが出る */
        return Double.NaN;
    }

    /* -(減算)ボタンが押された時の処理 */
    private void minus(){
        /* 四則計算ボタンがまだ押されていない場合 */
        if( sig == NONE ){
            /* 数字が入力されていなかったら何もしない */
            /* 数字が入力されていたら、入力のテキストフィールドの数字を結果領域に移動する。*/
            if( txtInput.getText().length() != 0 ){
                txtAnswer.setText(txtInput.getText());
                txtInput.setText("");
            }
        /* 四則計算ボタンが押されていた場合、*/
        /* 入力フィールドに数字が入っていればその計算をする。*/
        /* 入っていなければ何もしない */
        }else{
            double in = getNumber(txtInput .getText());
            double an = getNumber(txtAnswer.getText());
            if( !Double.isNaN(in) ){
                txtAnswer.setText(String.valueOf( calculate(an, in, sig) ));
                txtInput.setText("");
            }
        }
        /* −ボタンが押されたことを記憶する。*/
        sig = MINUS;
    }

    /* +(加算)ボタンが押された時の処理 */
    /* 以下、−の時とほとんど同じなので、コメントは割愛する。*/
    private void plus(){
        if( sig == NONE ){
            if( txtInput.getText().length() != 0 ){
                txtAnswer.setText(txtInput.getText());
                txtInput.setText("");
            }
        }else{
            double in = getNumber(txtInput .getText());
            double an = getNumber(txtAnswer.getText());
            if( in != Double.NaN ){
                txtAnswer.setText(String.valueOf( calculate(an, in, sig) ));
                txtInput.setText("");
            }
        }
        sig = PLUS;
    }

    /* *(乗算)ボタンが押された時の処理 */
    private void mul(){
        if( sig == NONE ){
            if( txtInput.getText().length() != 0 ){
                txtAnswer.setText(txtInput.getText());
                txtInput.setText("");
            }
        }else{
            double in = getNumber(txtInput .getText());
            double an = getNumber(txtAnswer.getText());
            if( in != Double.NaN ){
                txtAnswer.setText(String.valueOf( calculate(an, in, sig) ));
                txtInput.setText("");
            }
        }
        sig = MUL;
    }

    /* /(除算)ボタンが押された時の処理 */
    private void divide(){
        if( sig == NONE ){
            if( txtInput.getText().length() != 0 ){
                txtAnswer.setText(txtInput.getText());
                txtInput.setText("");
            }
        }else{
            double in = getNumber(txtInput .getText());
            double an = getNumber(txtAnswer.getText());
            if( in != Double.NaN ){
                /* 本来ならば0で割り算しないことを確認する方がよい。*/
                /* Javaではdouble型の場合0で割ると[Infinity:無限]となり、エラーとならない。*/
                txtAnswer.setText(String.valueOf( calculate(an, in, sig) ));
                txtInput.setText("");
            }
        }
        sig = DIVIDE;
    }

    /* =ボタンが押された */
    private void equal(){
        if( sig == NONE ){
            if( txtInput.getText().length() != 0 ){
                txtAnswer.setText(txtInput.getText());
                txtInput.setText("");
            }
        }else{
            double in = getNumber(txtInput .getText());
            double an = getNumber(txtAnswer.getText());
            if( !Double.isNaN(in) ){
                txtAnswer.setText(String.valueOf( calculate(an, in, sig) ));
                txtInput.setText("");
            }
        }
        sig = NONE;
    }

    /* バックスペースが押された場合、入力フィールドから1文字消す。*/
    private void backspace(){
        String str    = txtInput.getText();
        int    length = str.length();

        /* 1文字以上入力されているか */
        if( length > 0 ){
            /* 1文字削除 */
            str = str.substring(0, length-1);

            /* 1文字削除されて0だけ残ったら、それも削除する。*/
            if( str.equals("0") )
                str = "";
            txtInput.setText(str);
        }
    }

    /* 入力フィールドをクリアする */
    private void ce(){
        txtInput.setText("");
    }

    /* すべてをクリアする */
    private void clear(){
        txtInput.setText("");
        txtAnswer.setText("");
        sig = NONE;
    }

    /* 文字列を数字に変換する。 */
    private double getNumber(String s){
        try{
            return Double.valueOf(s).doubleValue();
        }catch(Exception e){
            return Double.NaN;
        }
    }

    public static void main(String args[]){
        new Calc();
    }
}
JavaAppletが有効だとここに上記のプログラム実施例が表示されます


←前ページへ :  トップへ :  次ページへ→