本ページはプロモーションが含まれています

Java入門

【初心者向け】Javaプログラミングで電卓を作る方法

トム

・都内自社開発IT企業勤務/javaのバックエンドエンジニア
/java歴10年以上 ・首都圏在住30代
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎

JavaでGUI付きの電卓を作りたいと考えたとき、最初に浮かぶのが「どうやって部品を配置して、ボタン操作を処理するのか」という疑問でしょう。

本記事では、Swingライブラリを使って、シンプルな電卓アプリをゼロから実装する方法を解説します。

JFrameJButtonJTextFieldなどの基本的なGUI部品の使い方に加えて、ボタンイベントの処理、計算ロジックの組み立て方までを網羅します。

最終的に、足し算・引き算・掛け算・割り算ができる完成形を目指します。

Javaの基礎力を身につけたい初学者に最適な題材です。コード全体の流れを理解しながら、自分の手で電卓を動かせるようになることが、この記事のゴールです。

設計

Javaプログラミングで作る電卓の基本仕様

まずは完成形を明確にしておきましょう。以下のような電卓を作っていきます。

項目内容
アプリ名シンプル電卓
GUIライブラリSwing(標準ライブラリ)
機能加算、減算、乗算、除算、クリア
入力方式数字ボタンと演算子ボタンをクリック入力
出力方式テキストフィールドに結果を表示

電卓アプリの画面イメージ

 ---------------------
|       1234         |  ← 表示部(JTextField)
 ---------------------
| 7 | 8 | 9 |  ÷  |    ← 数字 & 演算子(JButton)
| 4 | 5 | 6 |  ×  |
| 1 | 2 | 3 |  −  |
| 0 | C | = |  +  |

電卓アプリの構成要素

  • GUIパーツ:
    • JFrame:メインウィンドウ
    • JTextField:計算結果の表示部
    • JButton:数字・演算子・イコール・クリアなどのボタン
  • イベント処理
    • ボタンが押されたときの処理(ActionListenerの実装)
  • 計算処理ロジック
    • 入力された数値と演算子を保持
    • =が押されたときに計算を実行

コード

では、実際にコードを書いていきましょう。

電卓アプリのJavaコード全体

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
// JFrameを継承し、ボタン操作のイベントを扱うActionListenerを実装
public class SimpleCalculator extends JFrame implements ActionListener {
    // 表示用のテキストフィールド
    private JTextField display;
    // 最初の数値(演算の左辺)
    private String firstOperand = "";
    // 選択された演算子(+、-、*、/)
    private String operator = "";
    // 演算子が押されたかどうかのフラグ
    private boolean isOperatorClicked = false;
    // コンストラクタ(アプリが起動された時に実行される処理)
    public SimpleCalculator() {
        // ウィンドウのタイトルを設定
        setTitle("Java電卓");
        // ウィンドウサイズを設定
        setSize(300, 400);
        // 「×」で閉じたときにアプリを終了させる
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        // レイアウトマネージャをBorderLayoutに設定(画面を上下左右と中央に分けて配置できる)
        setLayout(new BorderLayout());
        // 数字や結果を表示するテキストフィールドを作成
        display = new JTextField();
        display.setEditable(false); // 入力はできない(ボタンでのみ操作)
        display.setFont(new Font("Arial", Font.PLAIN, 24)); // フォントサイズを大きく
        add(display, BorderLayout.NORTH); // テキストフィールドを画面の上(North)に配置
        // ボタンを並べるパネルを作成(4行4列のグリッドレイアウト)
        JPanel buttonPanel = new JPanel(new GridLayout(4, 4));
        // ボタンの表示文字を配列で用意
        String[] buttons = {
                "7", "8", "9", "/",
                "4", "5", "6", "*",
                "1", "2", "3", "-",
                "0", "C", "=", "+"
        };
        // ボタンを1つずつ作ってパネルに追加
        for (String text : buttons) {
            JButton button = new JButton(text); // ボタン作成
            button.setFont(new Font("Arial", Font.BOLD, 20)); // 見やすくするため大きめの太字フォント
            button.addActionListener(this); // ボタンが押された時の動作を登録
            buttonPanel.add(button); // パネルに追加
        }
        // ボタンパネルを画面中央に追加
        add(buttonPanel, BorderLayout.CENTER);
        // ウィンドウを表示
        setVisible(true);
    }
    // ボタンが押されたときに呼ばれるメソッド
    @Override
    public void actionPerformed(ActionEvent e) {
        // 押されたボタンの文字を取得
        String input = e.getActionCommand();
        // 数字が押された場合
        if (input.matches("[0-9]")) {
            if (isOperatorClicked) {
                // 演算子を押した直後なら、ディスプレイをクリア
                display.setText("");
                isOperatorClicked = false;
            }
            // 入力された数字を現在の表示に追加
            display.setText(display.getText() + input);
        }
        // 演算子(+ - * /)が押された場合
        else if (input.matches("[/*\\-+]")) {
            // 今の表示を左辺として記録
            firstOperand = display.getText();
            operator = input; // 押された演算子を記録
            isOperatorClicked = true; // フラグON
        }
        // イコール(=)が押された場合
        else if (input.equals("=")) {
            // 左辺と右辺を数値に変換
            double num1 = Double.parseDouble(firstOperand);
            double num2 = Double.parseDouble(display.getText());
            double result = 0;
            // 演算子に応じて計算処理を実行
            switch (operator) {
                case "+": result = num1 + num2; break;
                case "-": result = num1 - num2; break;
                case "*": result = num1 * num2; break;
                case "/":
                    if (num2 != 0) {
                        result = num1 / num2;
                    } else {
                        // ゼロ除算のときはエラー表示
                        display.setText("エラー");
                        return;
                    }
                    break;
            }
            // 計算結果を表示
            display.setText(String.valueOf(result));
        }
        // クリア(C)が押された場合
        else if (input.equals("C")) {
            // 表示と状態を初期化
            display.setText("");
            firstOperand = "";
            operator = "";
        }
    }
    // アプリのエントリーポイント(ここから実行される)
    public static void main(String[] args) {
        new SimpleCalculator(); // 電卓アプリを起動
    }
}

コードのポイント解説

  • SimpleCalculator クラスは JFrame を継承しています。JFrameは「ウィンドウアプリケーションの基本画面」になります。
  • ActionListener を実装しているので、ボタンがクリックされたときの処理を書くことができます。
// コンストラクタ(アプリが起動された時に実行される処理)
    public SimpleCalculator() {
        // ウィンドウのタイトルを設定
        setTitle("Java電卓");
        // ウィンドウサイズを設定
        setSize(300, 400);
        // 「×」で閉じたときにアプリを終了させる
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        // レイアウトマネージャをBorderLayoutに設定(画面を上下左右と中央に分けて配置できる)
        setLayout(new BorderLayout());

ポイント

  • setTitle: ウィンドウのタイトルを「Java電卓」にします。
  • setSize: ウィンドウサイズ(幅300、高さ400)。
  • setDefaultCloseOperation(EXIT_ON_CLOSE): ウィンドウを閉じたらアプリも終了。
  • setLayout: 部品の配置方法を「上下左右+中央」の5分割方式(BorderLayout)にします。
    display = new JTextField();
    display.setEditable(false);
    display.setFont(new Font("Arial", Font.PLAIN, 24));
    add(display, BorderLayout.NORTH);

ポイント

  • JTextField:数字や結果を表示する場所。
  • setEditable(false):手入力できないようにします(ボタンだけで入力)。
  • setFont:文字を大きめに見やすく。
  • add(display, BorderLayout.NORTH):ウィンドウの上部に表示します。
    JPanel buttonPanel = new JPanel(new GridLayout(4, 4));
    String[] buttons = {
        "7", "8", "9", "/",
        "4", "5", "6", "*",
        "1", "2", "3", "-",
        "0", "C", "=", "+"
    };

ポイント

  • JPanel :4×4のグリッド(マス目)状にボタンを配置。
  • buttons:ボタンに表示するテキスト一覧。電卓に必要な数字・記号が並んでいます。
    for (String text : buttons) {
        JButton button = new JButton(text);
        button.setFont(new Font("Arial", Font.BOLD, 20));
        button.addActionListener(this);
        buttonPanel.add(button);
    }
    add(buttonPanel, BorderLayout.CENTER);
    setVisible(true);

ポイント

  • JButton :各テキスト(例: “7”, “8”, “C”, “=” など)に対応するボタンを作る。
  • setFont :文字サイズを見やすく設定。
  • addActionListener(this):ボタンが押されたとき actionPerformed メソッドが呼ばれるようにする。
  • add(buttonPanel, BorderLayout.CENTER):ウィンドウの中央に配置。
  • setVisible(true):画面を表示
@Override
public void actionPerformed(ActionEvent e) {
    String input = e.getActionCommand();

ポイント

  • actionPerformed:ボタンが押されるとここが呼ばれます。
  • getActionCommand() :押されたボタンの文字を取得します。
if (input.matches("[0-9]")) {
    if (isOperatorClicked) {
        display.setText("");
        isOperatorClicked = false;
    }
    display.setText(display.getText() + input);

ポイント

  • input.matches("[0-9]"):0~9 の数字ボタンが押されたときの処理。
  • display.setText(""):直前に演算子が押されていたら、表示をリセット。
  • display.setText(display.getText() + input):数字を画面に追加していきます。
} else if (input.matches("[/*\\-+]")) {
    firstOperand = display.getText();
    operator = input;
    isOperatorClicked = true;

ポイント

  • else if (input.matches("[/*\-+]")):演算子が押されたときの処理。
  • firstOperand = display.getText():今の表示されている数字を firstOperand に保存。
  • operator = input:押された記号(演算子)を operator に保存。
  • isOperatorClicked:次に表示される数字は「2つ目の数字」になるので、リセット準備。
} else if (input.equals("=")) {
    double num1 = Double.parseDouble(firstOperand);
    double num2 = Double.parseDouble(display.getText());
    double result = 0;
    switch (operator) {
        case "+": result = num1 + num2; break;
        case "-": result = num1 - num2; break;
        case "*": result = num1 * num2; break;
        case "/":
            if (num2 != 0) {
                result = num1 / num2;
            } else {
                display.setText("エラー");
                return;
            }
            break;
    }
    display.setText(String.valueOf(result));

ポイント

  • else if (input.equals("=")):=が押されたときの処理。
  • Double.parseDouble(firstOperand):(最初の数字)を取り出す。
  • Double.parseDouble(display.getText()):display(次の数字)を取り出す。
  • switch (operator):演算子ごとに switch 文で処理を分岐。
  • 割り算で 0 を割るときだけは「エラー」と表示。
  • display.setText(String.valueOf(result)):結果を文字列に変換して表示。
} else if (input.equals("C")) {
    display.setText("");
    firstOperand = "";
    operator = "";
}

表示や保存されていた値を全部リセットします。

ポイント

  • else if (input.equals("C")):Cが押されたときの処理。
  • display.setText(""):表示をリセット。
  • firstOperand = "":最初の数字をリセット。
  • operator = "":入力された記号をリセット。
public static void main(String[] args) {
    new SimpleCalculator();
}

ポイント

  • SimpleCalculator を new することで、画面が表示され、使えるようになります。

完成イメージ

実際に完成したイメージの電卓です。今回は最低限の機能だけ実装しました。

まとめ:Java電卓の作り方はプログラミング学習の第一歩

本記事では、JavaとSwingを使ってGUI電卓をゼロから実装する方法を解説しました。

GUI部品の配置方法、ボタンイベントの処理、計算ロジックの作成といった実践的なステップを追いながら、実用的なアプリを構築する流れを体験できます。

Java初心者にとっても理解しやすい内容となっており、「コードを動かす力」を養う題材として最適です。

【要点まとめ】

  • JavaとSwingでGUI付き電卓を自作できる
  • JFrameでアプリのウィンドウを作成する
  • JTextFieldで計算結果を表示する
  • JButtonで数字や演算子の入力を行う
  • GridLayoutでボタンを4×4に配置する
  • ActionListenerで各ボタンの動作を定義する
  • 数字と演算子の状態を内部で保持する
  • =ボタンで計算処理を実行するロジックを構築する
  • ゼロ除算時は「エラー」を表示して安全対処する
  • Cボタンで入力状態を初期化する実装も含まれる

この記事を読めば、Javaの基本的なGUI構築スキルだけでなく、ユーザーの操作に応じて状態を管理するプログラミング的思考も身につけることができます。

  • この記事を書いた人
  • 最新記事

トム

・都内自社開発IT企業勤務/javaのバックエンドエンジニア
/java歴10年以上 ・首都圏在住30代
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎

-Java入門