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

Java入門

Java電卓の作り方|初心者でもSwingで30分完成【2026年版】

CATEGORY
REV.
DRAWN BY
TOM
SHEETS
9枚
Calculator(Swingで電卓を作る)

トム

SESで約8年、環境を変えられないもどかしさの中にいました。32歳で自社開発企業に転職し、今はClaude Codeと自動化で、仕事も時間も組み直している途中です。
・Javaバックエンドエンジニア(Java歴12年以上)
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎
詳細なプロフィール

𝕏

Javaで電卓アプリを作りたい初心者の方へ。この記事のコピペコードなら、Swingの経験がなくても30分で四則演算対応の電卓が完成します。

必要なのはJFrame・JButton・ActionListenerというSwingの3要素だけ。

コンパイル・実行の手順、よくあるエラー5選の対処法までを2026年版として網羅しています。Javaの基礎(条件分岐・ループ)を学び終えた方なら、最後まで詰まらず動かせます。

読み終える頃には、GUI付きアプリを自作する流れと、ユーザー操作に応じて状態を管理するプログラミング的思考の両方が身につきます。

この記事の対象と学べること

  • 対象読者:Javaの基礎(条件分岐・ループ)を学び終えた初学者
  • この記事で学べること:JDKの確認方法、Swingの基本GUI部品(JFrame・JButton・JTextField)の使い方、ボタンイベントの処理(ActionListener)、完成コードのコンパイルと実行方法

PARTS LIST /目次

Java電卓の作り方|初心者向けの動作環境と対象者

この章では、電卓アプリを作り始める前に押さえておきたい前提知識をまとめます。SwingというGUIライブラリの基本、JDKのバージョン確認方法、IDEでのプロジェクト作成手順、そしてこの記事がどんな読者を対象にしているかを順に説明します。

Swingとは?JavaのGUIライブラリの基礎

Swingは、Javaでデスクトップアプリ(GUI)を作るために標準で用意されているライブラリです。

外部ライブラリの追加なしで、ボタンやテキスト入力欄などの部品をすぐに使えます。

同じくJavaのGUIライブラリにはAWTやJavaFXがありますが、Swingは「枯れた安定ライブラリ」として現在も学習教材で広く使われています。

この記事では、Swingの代表的な部品であるJFrame・JTextField・JButtonと、ボタン操作のイベントを扱うActionListenerを組み合わせます。

この4つで電卓を作ります。

JDKの確認方法(初心者向け)

電卓アプリを作るには、Javaの開発環境(JDK)がインストールされている必要があります。

ターミナル(Macならターミナル、Windowsならコマンドプロンプト)で以下を実行して確認してください。

$ java -version
# java version "21.0.x" などLTSバージョンが表示されればOK(17でもOK)

$ javac -version
# javac 21.0.x などLTSバージョンが表示されればOK(17でもOK)

バージョンが表示されない場合は、Oracle公式サイトからJDK 25 LTSをインストールしてください(2025年9月リリースの最新LTS。

旧LTSのJava 21も引き続きサポート対象です)。

無料のOpenJDKディストリビューションとして Eclipse Temurin もおすすめです。

この記事のコードはJava 8以降で動作します。動作確認は2026年7月時点でJava 17 / Java 21 LTS / Java 25 LTS / Java 26で実施済みです。

IntelliJ/Eclipseでのプロジェクト作成手順

ターミナル操作に慣れていない場合は、IDEでプロジェクトを作成してから進めると迷いません。

  1. 新規プロジェクトを作成する
  • IntelliJ IDEAの場合:「File → New → Project」→「Java」を選択 → プロジェクト名を入力して作成
  • Eclipseの場合:「File → New → Java Project」→ プロジェクト名を入力して「Finish」
  1. src フォルダを右クリックして、SimpleCalculator クラスを作成する(IntelliJ IDEAは「New → Java Class」、Eclipseは「New → Class」)

ここまで作成すれば、以降のコード貼り付け・実行もIDEの「実行」ボタンで完結します。

あわせて読む

こんな方向けの記事です

  • Javaの条件分岐(if文)やループ(for文)の基礎を学んだ
  • 初めてGUIアプリを作ってみたい
  • SwingやActionListenerがどういうものか知りたい
  • 完成するコードをコピーして動かしてみたい
あわせて読む

Swing vs JavaFXはどっちがいい?初心者向け学習コストを比較

JavaのGUIライブラリはSwingとJavaFXが代表的です。

この記事ではSwingを採用しましたが、初心者がどちらを選ぶべきか実装観点で比較します。

項目SwingJavaFX
導入の手軽さJDK標準で追加設定不要JDK 11以降は別途OpenJFX導入が必要
初学者の学習コスト低(クラス+ActionListenerで完結)中(FXML / CSS / Sceneの概念を学ぶ必要)
UIの見た目シンプル(OS標準寄り)モダン・カスタマイズ性高い
学習教材の量非常に多い(枯れた技術)増えてはいるがSwingより少ない
実務での採用レガシー社内ツール多数新規プロジェクトで採用率上昇中

結論として、Java入門〜中級まではSwing、業務UIや見栄え重視のアプリはJavaFXという使い分けがおすすめです。

この記事のコードを動かせたなら、Swingの基礎は十分習得できています。

この記事が最初の教材としてSwingを選んでいるのも、この学習コストの差が理由です。

JavaFXはFXML・CSS・Sceneグラフといった前提知識が増える分、「GUIとは何か」を最短で体感するには回り道になりがちです。

まずSwingでJFrame・JButton・ActionListenerの関係を理解してください。余力が出てからJavaFXのモダンなUI表現に進む順番を、編集方針としておすすめします。

Java電卓アプリの仕様と画面設計

この章では、これから実装する電卓アプリの仕様と画面構成を先に確定します。対応する四則演算やボタン配置、画面イメージをあらかじめ明確にしておくことで、次章のコード実装がスムーズに進みます。

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

まず完成形を明確にしておきます。次のシンプル電卓を作ります。

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

電卓アプリの画面イメージ(GUIレイアウト設計図)

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

電卓アプリの構成要素

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

Java電卓の完成コード(コピペOK)

ここから、電卓アプリの完成コード全体と各部分の役割を解説します。

電卓アプリの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("[/*\\-+]")) {
            // 「エラー」表示中は計算に使えないので何もしない(Cで初期化してから入力し直す)
            if (display.getText().equals("エラー")) {
                return;
            }
            // 今の表示を左辺として記録
            firstOperand = display.getText();
            operator = input; // 押された演算子を記録
            isOperatorClicked = true; // フラグON
        }
        // イコール(=)が押された場合
        else if (input.equals("=")) {
            // 入力が空の場合は何もしない
            if (firstOperand.isEmpty() || display.getText().isEmpty()) {
                return;
            }
            // 左辺と右辺を数値に変換
            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("エラー");
                        // 状態を初期化し、次に数字を押したら「エラー」を消して入力し直せるようにする
                        firstOperand = "";
                        operator = "";
                        isOperatorClicked = true;
                        return;
                    }
                    break;
            }
            // 計算結果を表示
            display.setText(String.valueOf(result));
            // 次に数字を押したら、結果に続けず新しい計算として始める
            isOperatorClicked = true;
        }
        // クリア(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("[/*\\-+]")) {
    if (display.getText().equals("エラー")) {
        return;
    }
    firstOperand = display.getText();
    operator = input;
    isOperatorClicked = true;

ポイント

  • else if (input.matches("[/*\-+]")):演算子が押されたときの処理。
  • firstOperand = display.getText():今の表示されている数字を firstOperand に保存。
  • operator = input:押された記号(演算子)を operator に保存。
  • isOperatorClicked:次に表示される数字は「2つ目の数字」になるので、リセット準備。
  • display.getText().equals("エラー"):0で割った直後の「エラー」表示は数値にできないので、演算子が押されても何もしない。
} else if (input.equals("=")) {
    // 入力が空の場合は何もしない
    if (firstOperand.isEmpty() || display.getText().isEmpty()) {
        return;
    }
    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("エラー");
                firstOperand = "";
                operator = "";
                isOperatorClicked = true;
                return;
            }
            break;
    }
    display.setText(String.valueOf(result));
    isOperatorClicked = true;

ポイント

  • else if (input.equals("=")):=が押されたときの処理。
  • Double.parseDouble(firstOperand):(最初の数字)を取り出す。
  • Double.parseDouble(display.getText()):display(次の数字)を取り出す。
  • switch (operator):演算子ごとに switch 文で処理を分岐。
  • 割り算で 0 を割るときだけは「エラー」と表示し、左辺と演算子を初期化する。
  • display.setText(String.valueOf(result)):結果を文字列に変換して表示。
  • isOperatorClicked = true:結果のあとに数字を押すと、結果に続けずに新しい計算として入力できる。
ボタンを押すたびに変わる変数(1 → 2 → + → 3 → = の例)
押したボタン
display
firstOperand / operator
isOperatorClicked
(起動直後)表示も変数も空、フラグは false
""
"" / ""
false
1数字なので、表示の後ろに 1 を追加
"1"
"" / ""
false
22 を追加して表示は 12
"12"
"" / ""
false
+表示の 12 を firstOperand に、+ を operator に保存し、フラグを true に
"12"
"12" / "+"
true
3フラグが true なので表示を空にしてから 3 を入力し、フラグを false に
"3"
"12" / "+"
false
=12.0 + 3.0 を計算し、String.valueOf で表示
"15.0"
"12" / "+"
true
NOTE入力は説明用の例です。灰色の値は、そのボタンでは変わらない変数です。
} 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ファイルをコンパイルしてから実行するまでの手順と、完成後の画面イメージを確認します。手順はターミナルでコマンドを実行する方法と、IDEの実行ボタンを使う方法の2通りを紹介します。

コンパイルと実行の手順

SimpleCalculator.javaのコードを保存したら、あとはコンパイルと実行の2コマンドで電卓アプリが起動します。

コードを書いたら、ターミナル(またはコマンドプロンプト)を開いて、ファイルのあるディレクトリに移動し、以下のコマンドを実行します。

# 1. コンパイル(SimpleCalculator.java を .class ファイルに変換)
$ javac SimpleCalculator.java

# 2. 実行(コンパイル後に実行)
$ java SimpleCalculator

javacとjavaの2コマンドを実行するとウィンドウが立ち上がり、電卓を操作できます。

ポイント

  • ファイル名は SimpleCalculator.java(クラス名と一致させる必要があります)
  • IntelliJ IDEA や Eclipse を使っている場合は、IDEの「実行」ボタンでも起動できます

Java電卓の完成イメージとSwingアプリの動作確認

実際に動作確認した完成画面と、SwingとJavaFXの使い分けの参考記事を紹介します。

Swingで作成したJava電卓アプリの完成画面。数字ボタンと演算子ボタン、結果表示欄を備えたGUI

次の画像が完成したシンプル電卓です(macOS / Java 17 / Java 21 LTS / Java 25 LTS / Java 26で動作確認)。

今回は最低限の機能だけ実装しました。

SwingとJavaFXの違いが気になる方は、こちらの記事も参考にしてください。

あわせて読む

Java電卓でよくあるエラーは?5選と対処法

初めて動かす際につまずきやすいエラーと、その原因・対処法を表にまとめました。

エラー原因対処法
NumberFormatException数字を入力せずに = を押したコード内で isEmpty() チェックを追加(上記コードでは対応済み)
エラーと表示される0で割り算した仕様通りの動作。C ボタンでリセットして再入力してください
クラスが見つからないファイル名とクラス名が不一致ファイル名を SimpleCalculator.java にする
javac が使えないJDKがインストールされていないJDKをインストールし、パスを通す
ウィンドウが表示されない / 一瞬で閉じるsetVisible(true) の呼び忘れ、または main メソッドから new SimpleCalculator() を呼んでいないコード末尾の main から new SimpleCalculator() を呼び、コンストラクタ内で setVisible(true) を実行しているか確認

Java電卓実装でハマりやすいポイントは?3つの対処法

Swing電卓のコードは短いものの、見た目や状態管理で初学者がつまずきやすい箇所があります。

押さえておきたい実装ノウハウを3つ紹介します。

ハマりポイント1:高解像度ディスプレイで文字が小さい・ぼやける

高解像度(HiDPI)のディスプレイでSwingアプリを起動すると、JDKの版によっては、ボタンや文字が小さく、ぼやけて表示されます。

macOSのRetinaディスプレイにはJDKが以前から対応しています。WindowsとLinuxも、JDK 9からOSの拡大率に合わせて自動で拡大されるようになりました(JEP 263)。JDK 8以前をWindowsやLinuxで使っている場合は、まずJDKを新しくしてください。

対処法として、起動時のJVMオプションに -Dsun.java2d.uiScale=2 を渡すか、コード冒頭で System.setProperty("sun.java2d.uiScale", "2"); を呼ぶと、拡大率を手動で指定できます。

ハマりポイント2:ボタンの日本語が「□(豆腐)」になる

この記事のコードでは Font("Arial", ...) を指定していますが、Arialは日本語の文字を持たないフォントです。日本語は、足りない文字を別のフォントで補う仕組みで表示されますが、補い方はOSやJDKによって違います(macOS・Java 21では日本語も表示されました)。環境によっては「クリア」など日本語のボタンが四角形(豆腐)になるので、日本語のボタンを追加するなら日本語を含むフォントを指定しておくと確実です。

対処法は、Windows環境では Font("MS Gothic", Font.BOLD, 20)、macOS環境では Font("Hiragino Sans", Font.BOLD, 20) を指定すること。

OSをまたぐ場合は Font(Font.SANS_SERIF, Font.BOLD, 20) で論理フォントを指定すると安全です。

ハマりポイント3:演算子を連続で押すと意図しない結果になる

この記事のコードは「数字 → 演算子 → 数字 → =」の流れを前提にしています。そのため「1 + 2 + 3」のように演算子を連続入力すると、最後の操作だけが反映されてしまいます。

対処法は、演算子が押された時点で既に左辺と右辺と演算子が揃っているなら先に計算を実行するロジックを追加すること。

具体的には else if (input.matches("[/*\\-+]")) ブロックの先頭で firstOperand が空でなく、かつ !isOperatorClicked なら = 押下時と同じ計算処理を呼び出してから演算子を更新します。

実電卓に近い挙動にしたい場合の必須拡張です。

Java電卓のよくある質問(FAQ)

Java電卓の作り方について、読者からよく聞かれる質問をまとめました。IDEの要否やJavaのバージョン対応、商用利用の可否など、本文で触れきれなかった疑問をQ&A形式で補足します。細かい手順や根拠は、各見出しの本文もあわせて確認してください。

Q1. Java電卓を作るのにIDE(IntelliJ/Eclipse)は必須ですか?

A1. 必須ではありません。テキストエディタ(VS Codeなど)と JDK さえあれば、ターミナルから javac と java コマンドだけで作成・実行できます。最初は軽量なエディタで仕組みを理解し、慣れてからIDEに移行するのもおすすめです。

Q2. SwingとJavaFX、初心者はどっちで電卓を作るべきですか?

A2. 初心者はSwingから始めるのがおすすめです。Java標準ライブラリに含まれるため追加インストールが不要で、この記事のように小さなコードで動く電卓を作れます。モダンなUIや CSS スタイリングが必要になったら、次のステップとしてJavaFXに進みましょう。

Q3. 小数点や負の数の計算には対応していますか?

A3. この記事の最小実装は Double.parseDouble で内部的にdouble型として扱うため、入力値が整数のみでも、2 + 2 の結果は 4.0 のように小数つきで表示されます。小数点ボタン「.」を追加したい場合は、最後の「さらに発展させるには?」を参考に拡張してください。

Q4. このコードはJavaのどのバージョンで動きますか?

A4. Java 8以降であれば動作します。動作確認は Java 17 / Java 21 LTS / Java 25 LTS / Java 26 で実施済みで、最新のLTS環境でもそのままコンパイル・実行できます。java -version で 1.8 以上が表示されることを確認してください。

Q5. なぜOptionalやStream APIを使わないのですか?

A5. 意図的にシンプルな実装にしています。この記事はSwingのGUI構造(JFrame・JButton・ActionListener)の理解が目的のため、モダンなJava機能は最小限に留めました。基本構造を理解したあとで、状態管理をOptionalに置き換える改造に挑戦すると学習効果が高まります。

Q6. この記事のコードは商用アプリに使えますか?

A6. 学習目的のサンプルコードのため、そのまま商用利用するにはエラーハンドリングや入力桁数の制限など追加実装が必要です。まずはこの記事のコードで基本を理解し、商用利用時は例外処理を強化した上で使用してください。

Q7. Windowsでも同じコードで動きますか?

A7. はい、動きます。Javaはクロスプラットフォーム言語のため、Swingで書いたこの記事のコードはWindows・macOS・Linuxのいずれでも同じソースコードのままコンパイル・実行できます。ただし日本語フォントの指定は環境ごとに異なるため、「ハマりポイント2」を参考にしてください。

Q8. 電卓の見た目(色・フォント)はカスタマイズできますか?

A8. できます。ボタンの色はbutton.setBackground(Color.LIGHT_GRAY)、文字色はbutton.setForeground(Color.BLACK)で変更可能です。フォントはこの記事のコード内のnew Font("Arial", Font.BOLD, 20)の部分を書き換えれば調整できます。

まとめ:Java電卓の作り方は2026年も学習の第一歩

JavaとSwingを使えば、GUI電卓をゼロから実装できます。

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

Java初心者でも理解しやすく、「コードを動かす力」を養う題材として最適です。

【要点まとめ】

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

Java電卓を血肉にする3ステップ学習法

この記事のコードを「読んで分かった」と思っても、いざ自分で別アプリを書こうとすると手が止まる、という現象は多くのJava学習者が経験しています。

コードを血肉にするには、以下の3ステップが効きます。

  1. 写経:この記事のコードをそのまま自分の手でタイピング。コピペではなく、変数名・記号・括弧の位置まで体に通す。
  2. 改造:写経したコードに小さな変更を加える。例: ボタン色を変える / 「/」「*」の表示を「÷」「×」に変える / フォントを変える。「動かなくなる経験」が理解を深めます。
  3. 自作:この記事の構成を見ずに、別の小さなGUIアプリ(例: ストップウォッチ・じゃんけんゲーム)を自分でゼロから作る。Swingの構成パターンが定着しているかの最終チェックです。

「読んで理解した気になる罠」は、コピペで動かして満足したときに起きます。3ステップを通せば、Swingの基本構造が「自分のもの」になります。

あわせて読む
あわせて読む

さらに発展させるには?

電卓アプリを完成させたら、次のステップに挑戦してみましょう。

  • キーボード入力対応:KeyListenerを使って、マウスを使わずに数字や演算子を入力できるようにする
  • 小数点ボタンの追加:「.」ボタンを追加してdouble型の計算に対応する
  • JavaFXでモダンUI化:Swingの代わりにJavaFX(2026年10月時点ではJavaFX 27が最新。2026年9月15日にGA)を使い、CSSでデザインを整えたリッチなUIに作り直す

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

REVISIONS / 改訂履歴
REV.DATE内容
62026-10-16図解を描き直し(図面のデザインにそろえた)
52026-10-14一人称と言い回しの表記をそろえた
42026-10-052026年10月時点の情報で全体を見直し(古い記述を1件更新)
32026-07-292026年7月時点の情報で全体を見直し(古い記述を5件更新)
… ほか1回の改訂
12025-04-13初版
NEXT READ本棚から1本

AIで開発を組み直すなら、まずこの5冊から

入門・実践・設計まで、Claude Codeの本をレベル別に5冊選んで比べました。

→ おすすめ5冊を見る

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

トム

SESで約8年、環境を変えられないもどかしさの中にいました。32歳で自社開発企業に転職し、今はClaude Codeと自動化で、仕事も時間も組み直している途中です。
・Javaバックエンドエンジニア(Java歴12年以上)
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎
詳細なプロフィール

𝕏

Java入門