首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Swing 計算器完整實作:標準型 GUI 程式設計教學

     編輯:Java 相關知識

專案簡介

本專案使用 Java Swing 實作一款標準型計算器,支援四則運算、百分比、開根號、倒數、正負號切換、記憶體功能 (MC/MR/MS/M+)、退位/清除、複製貼上、說明系統。代碼採用單類實作 ActionListener,邏輯集中在 actionPerformed,適合初學者理解事件驅動 GUI 程式設計。

核心類別結構

public class Calculator implements ActionListener {
    // UI 元件
    JFrame frame; JTextField textAnswer, textMemory;
    JPanel panel, panel1, panel2, panel3;
    JMenuBar mainMenu; JMenu editMenu, viewMenu, helpMenu;
    JButton[] button = new JButton[10];  // 0-9 數字鍵
    JButton buttonAdd, buttonSub, buttonMul, buttonDiv, buttonMod;
    JButton buttonSqrt, buttonDao, buttonEqual, buttonDot, buttonAddAndSub;
    JButton buttonMC, buttonMR, buttonMS, buttonMAdd;
    JButton buttonBk, buttonCe, buttonC;
    
    // 狀態變數
    DecimalFormat df = new DecimalFormat("0.##############");
    boolean clickable = true;      // 防止連續運算符輸入
    double memoryd = 0, memoryi = 0; // 記憶體雙槽 (double/int)
    double vard = 0, answerd = 0;    // 運算中間值、結果值
    short key = -1, prekey = -1;     // 當前/上一運算符編碼
    String copy = "";                // 剪貼板
}

介面佈局架構

frame (BorderLayout)
├─ NORTH: JMenuBar (編輯/查看/幫助)
├─ CENTER: textAnswer (顯示區)
└─ SOUTH: panel1 (BorderLayout)
    ├─ NORTH: panel2 (FlowLayout RIGHT) → textMemory + buttonBk/CE/C
    └─ CENTER: panel3 (GridLayout 4x6) → 數字鍵、運算符、功能鍵

關鍵佈局代碼

panel3.setLayout(new GridLayout(4, 6));
// 按行序加入:MC 7 8 9 / sqrt | MR 4 5 6 * % | MS 1 2 3 - 1/x | M+ 0 +/- . + =
// 共 24 個按鈕,每行 6 個

核心邏輯:actionPerformed 狀態機

數字與小數點輸入

// 數字鍵 0-9
for (int i=0; i<=9; i++)
    if (e.getSource()==button[i] && clickable)
        textAnswer.setText(textAnswer.getText() + i);

// 小數點:防止重複
if (e.getSource()==buttonDot && clickable) {
    if (!textAnswer.getText().contains("."))
        textAnswer.setText(textAnswer.getText() + ".");
}

四則運算:統一處理模板

// 以加法為例,減乘除同理
if (e.getSource()==buttonAdd && clickable) {
    // 先結算上一個運算 (prekey)
    switch (prekey) {
        case 0: answerd += Double.parseDouble(textAnswer.getText()); break; // +
        case 1: answerd -= Double.parseDouble(textAnswer.getText()); break; // -
        case 2: answerd *= Double.parseDouble(textAnswer.getText()); break; // *
        case 3: 
            double val = Double.parseDouble(textAnswer.getText());
            if (val == 0) { showError("除數不能為零"); return; }
            answerd /= val; break; // /
        default: answerd = Double.parseDouble(textAnswer.getText());
    }
    textAnswer.setText("");  // 清空輸入區
    prekey = key = 0;        // 記錄當前為加法
}

等號鍵:支援連續運算

if (e.getSource()==buttonEqual && clickable) {
    if (prekey == 5) {  // 連續按 =
        // 使用上一個運算數 vard 重複運算
        switch (key) { case 0: answerd += vard; break; ... }
    } else {
        vard = Double.parseDouble(textAnswer.getText()); // 記住本次運算數
        switch (key) { case 0: answerd += vard; break; ... }
        prekey = -1;  // 重置上一運算符
    }
    prekey = 5;  // 標記剛按過 =
    textAnswer.setText(df.format(answerd));
}

特殊功能鍵

鍵邏輯重點
%第二運算數除 100,智能處理整數/小數
√負數報錯,Math.sqrt()
1/x零報錯,結果去尾小數點
+/-字串層面切換首字符 +/-
MC/MR/MS/M+雙槽記憶體 (double/int 分離),M+ 智能型別合併
Backspace字串刪除最後一字符
CE清空輸入區,重置 clickable
C全清:vard/answerd 歸零

選單功能

// 複製/貼上
if (e.getSource()==copyItem) copy = textAnswer.getText();
if (e.getSource()==pasteItem) textAnswer.setText(copy);

// 幫助/關於
if (e.getSource()==topHelp) 
    JOptionPane.showMessageDialog(panel, scrollHelp);
if (e.getSource()==aboutCal)
    JOptionPane.showMessageDialog(panel, "計算器 1.00\n開發者:樓競");

異常統一攔截

catch (Exception ex) {
    textAnswer.setText("操作非法");
    clickable = false;
}

啟動入口

public static void main(String[] args) {
    new Calculator();  // 建構子內完成 UI 建立、事件綁定、frame.show()
}

教學價值總結

  • 事件驅動模型:單一 ActionListener 透過 getSource() 分派
  • 狀態機設計:key/prekey/clickable 控制運算流程
  • Swing 佈局組合:BorderLayout + FlowLayout + GridLayout 實戰
  • 格式化輸出:DecimalFormat 控制精度
  • 防禦性程式:除零檢查、輸入驗證、異常統一處理

擴充方向

  1. 科學型計算器:加入 sin/cos/log/常數 π/e
  2. 數字分組顯示:DecimalFormat("#,###.##")
  3. 鍵盤快捷鍵支援:KeyBinding
  4. 歷史紀錄面板:JList + 雙擊帶入
  5. MVC 重構:分離 CalculatorModel、CalculatorView、CalculatorController

結語

這款計算器雖功能基礎,但涵蓋了 GUI 程式設計的核心要素:視窗建構、佈局管理、事件監聽、狀態維護、異常處理。建議初學者手敲代碼、斷點調試 actionPerformed 流程,體會「事件→狀態變更→視圖更新」的循環。掌握此模式,即可應對更複雜的 Swing/JavaFX 桌面應用開發。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved