JavaでGUI付きの電卓を作りたいと考えたとき、最初に浮かぶのが「どうやって部品を配置して、ボタン操作を処理するのか」という疑問でしょう。
本記事では、Swingライブラリを使って、シンプルな電卓アプリをゼロから実装する方法を解説します。
JFrameやJButton、JTextFieldなどの基本的な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()); 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電卓の作り方はプログラミング学習の第一歩
本記事では、JavaとSwingを使ってGUI電卓をゼロから実装する方法を解説しました。
GUI部品の配置方法、ボタンイベントの処理、計算ロジックの作成といった実践的なステップを追いながら、実用的なアプリを構築する流れを体験できます。
Java初心者にとっても理解しやすい内容となっており、「コードを動かす力」を養う題材として最適です。
【要点まとめ】
- JavaとSwingでGUI付き電卓を自作できる
- JFrameでアプリのウィンドウを作成する
- JTextFieldで計算結果を表示する
- JButtonで数字や演算子の入力を行う
- GridLayoutでボタンを4×4に配置する
- ActionListenerで各ボタンの動作を定義する
- 数字と演算子の状態を内部で保持する
- =ボタンで計算処理を実行するロジックを構築する
- ゼロ除算時は「エラー」を表示して安全対処する
- Cボタンで入力状態を初期化する実装も含まれる
この記事を読めば、Javaの基本的なGUI構築スキルだけでなく、ユーザーの操作に応じて状態を管理するプログラミング的思考も身につけることができます。