Javaで電卓アプリを作りたい初心者の方へ。本記事では、JavaのGUIライブラリ「Swing」を使った四則演算対応の電卓を、コピペで動く完成コードとともに30分で作成する手順を解説します。
JFrame・JButton・ActionListenerといったSwingの必須要素から、コンパイル・実行の方法、よくあるエラー対処までを2026年版として網羅。Javaの基礎(条件分岐・ループ)を学び終えた方なら、最後まで詰まらず動かせる構成にしています。
読み終える頃には、GUI付きアプリを自作する流れと、ユーザー操作に応じて状態を管理するプログラミング的思考の両方が身につきます。
- 対象読者:Javaの基礎(条件分岐・ループ)を学び終えた初学者
- この記事で学べること:JDKの確認方法、Swingの基本GUI部品(JFrame・JButton・JTextField)の使い方、ボタンイベントの処理(ActionListener)、完成コードのコンパイルと実行方法
Java電卓の作り方|動作環境と対象者
Swingとは?JavaのGUIライブラリの基礎
Swingは、Javaでデスクトップアプリ(GUI)を作るために標準で用意されているライブラリです。外部ライブラリの追加なしで、ボタンやテキスト入力欄などの部品をすぐに使えます。
同じくJavaのGUIライブラリにはAWTやJavaFXがありますが、Swingは「枯れた安定ライブラリ」として現在も学習教材で広く使われています。本記事では、Swingの代表的な部品であるJFrame・JTextField・JButtonと、ボタン操作のイベントを扱うActionListenerを組み合わせて電卓を作ります。
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 21 LTSをインストールしてください(無料のOpenJDKディストリビューションとして Eclipse Temurin もおすすめです)。本記事のコードはJava 8以降で動作します(2026年4月時点でJava 17 / Java 21 LTS / Java 25にて動作確認済)。
こんな方向けの記事です
- Javaの条件分岐(if文)やループ(for文)の基礎を学んだ
- 初めてGUIアプリを作ってみたい
- SwingやActionListenerがどういうものか知りたい
- 完成するコードをコピーして動かしてみたい
Java電卓アプリの仕様と画面設計
Javaプログラミングで作る電卓の基本仕様
まず完成形を明確にしておきます。次のシンプル電卓を作ります。
| 項目 | 内容 |
|---|---|
| アプリ名 | シンプル電卓 |
| GUIライブラリ | Swing(標準ライブラリ) |
| 機能 | 加算、減算、乗算、除算、クリア |
| 入力方式 | 数字ボタンと演算子ボタンをクリック入力 |
| 出力方式 | テキストフィールドに結果を表示 |
電卓アプリの画面イメージ
---------------------
| 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("[/*\\-+]")) {
// 今の表示を左辺として記録
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("エラー");
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()); display = new JTextField();
display.setEditable(false);
display.setFont(new Font("Arial", Font.PLAIN, 24));
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", "=", "+"
}; 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;} 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("C")) {
display.setText("");
firstOperand = "";
operator = "";
}表示や保存されていた値を全部リセットします。
public static void main(String[] args) {
new SimpleCalculator();
}Java電卓のコンパイル・実行方法
コードを書いたら、ターミナル(またはコマンドプロンプト)を開いて、ファイルのあるディレクトリに移動し、以下のコマンドを実行します。
# 1. コンパイル(SimpleCalculator.java を .class ファイルに変換)
$ javac SimpleCalculator.java
# 2. 実行(コンパイル後に実行)
$ java SimpleCalculatorこれらのコマンドを実行するとウィンドウが立ち上がり、電卓を操作できます。
Swing vs JavaFX|初心者の学習コストを比較
JavaのGUIライブラリはSwingとJavaFXが代表的です。本記事ではSwingを採用しましたが、初心者がどちらを選ぶべきか実装観点で比較します。
| 項目 | Swing | JavaFX |
|---|---|---|
| 導入の手軽さ | JDK標準で追加設定不要 | JDK 11以降は別途OpenJFX導入が必要 |
| 初学者の学習コスト | 低(クラス+ActionListenerで完結) | 中(FXML / CSS / Sceneの概念を学ぶ必要) |
| UIの見た目 | シンプル(OS標準寄り) | モダン・カスタマイズ性高い |
| 学習教材の量 | 非常に多い(枯れた技術) | 増えてはいるがSwingより少ない |
| 実務での採用 | レガシー社内ツール多数 | 新規プロジェクトで採用率上昇中 |
結論として、Java入門〜中級まではSwing、業務UIや見栄え重視のアプリはJavaFXという使い分けがおすすめです。本記事のコードを動かせたなら、Swingの基礎は十分習得できています。
Java電卓の完成イメージとSwingアプリの動作確認

次の画像が完成したシンプル電卓です(macOS / Java 21 LTSで動作確認)。今回は最低限の機能だけ実装しました。
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:macOS Retinaディスプレイで文字がぼやける
Apple SiliconのMacや高解像度ディスプレイでSwingアプリを起動すると、テキストやボタンの文字がぼやけて表示されることがあります。これはSwingのデフォルトレンダリングが高DPIに最適化されていないためです。
対処法として、起動時のJVMオプションに -Dsun.java2d.uiScale=2 を渡すか、コード冒頭で System.setProperty("sun.java2d.uiScale", "2"); を呼ぶと改善します。
ハマりポイント2:ボタンの日本語が「□(豆腐)」になる
本記事のコードでは Font("Arial", ...) を指定していますが、Arialは日本語をサポートしていないため、もし「クリア」など日本語表記のボタンを追加すると四角形(豆腐)で表示されます。
対処法は、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)
Q1. Java電卓を作るのにIDE(IntelliJ/Eclipse)は必須ですか?
必須ではありません。テキストエディタ(VS Codeなど)と JDK さえあれば、ターミナルから javac と java コマンドだけで作成・実行できます。最初は軽量なエディタで仕組みを理解し、慣れてからIDEに移行するのもおすすめです。
Q2. SwingとJavaFX、初心者はどっちで電卓を作るべきですか?
初心者はSwingから始めるのがおすすめです。Java標準ライブラリに含まれるため追加インストールが不要で、本記事のように小さなコードで動く電卓を作れます。モダンなUIや CSS スタイリングが必要になったら、次のステップとしてJavaFXに進みましょう。
Q3. 小数点や負の数の計算には対応していますか?
本記事の最小実装は Double.parseDouble で内部的にdouble型として扱うため、入力値が整数のみでも結果は 10.0 / 3.0 のような小数で出力されます。小数点ボタン「.」や負数ボタン「±」を追加したい場合は、最後の「さらに発展させるには?」を参考に拡張してください。
Q4. このコードはJavaのどのバージョンで動きますか?
Java 8以降であれば動作します。動作確認は Java 17 / Java 21 LTS / Java 25 で実施しており、最新の LTS 環境でもそのままコンパイル・実行可能です。java -version で 1.8 以上が表示されることを確認してください。
まとめ: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ステップが効きます。
- 写経:本記事のコードをそのまま自分の手でタイピング。コピペではなく、変数名・記号・括弧の位置まで体に通す。
- 改造:写経したコードに小さな変更を加える。例: ボタン色を変える / 「÷」「×」を「/」「*」から日本語に置き換える / フォントを変える。「動かなくなる経験」が理解を深めます。
- 自作:本記事の構成を見ずに、別の小さなGUIアプリ(例: ストップウォッチ・じゃんけんゲーム)を自分でゼロから作る。Swingの構成パターンが定着しているかの最終チェックになります。
「読んで理解した気になる罠」は、コピペで動かして満足したときに起きます。3ステップを通せば、Swingの基本構造が「自分のもの」になります。
さらに発展させるには?
電卓アプリを完成させたら、次のステップに挑戦してみましょう。
- キーボード入力対応:KeyListenerを使って、マウスを使わずに数字や演算子を入力できるようにする
- 小数点ボタンの追加:「.」ボタンを追加してdouble型の計算に対応する
- JavaFXでモダンUI化:Swingの代わりにJavaFX(2026年4月時点ではJavaFX 23が最新)を使い、CSSでデザインを整えたリッチなUIに作り直す
この記事を読めば、Javaの基本的なGUI構築スキルだけでなく、ユーザーの操作に応じて状態を管理するプログラミング的思考も身につけることができます。
