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

Java Swing 計算機完整實作:四則運算、科學鍵、記憶體功能

     編輯:Java 相關知識

以 JApplet/JFrame 雙模式實作標準計算機,支援四則運算、平方根、倒數、百分比、正負號切換、退位鍵、清除/全部清除、記憶體(MC/MR/MS/M+)完整功能。介面採 GridLayout 矩陣排列,顏色區分數字鍵(藍)與功能鍵(紅),可直接編譯執行。

按鍵陣列定義

private final String[] KEYS = {
    "7","8","9","/","sqrt",
    "4","5","6","*","%",
    "1","2","3","-","1/x",
    "0","+/-",".","+","="
};
private final String[] COMMAND = {"Backspace","CE","C"};
private final String[] M = {" ","MC","MR","MS","M+"};

核心運算邏輯

數字鍵處理

private boolean firstDigit = true;
private void handleNumber(String key) {
    if (firstDigit) display.setText(key);
    else if (key.equals(".") && display.getText().indexOf(".") < 0)
        display.setText(display.getText() + ".");
    else if (!key.equals("."))
        display.setText(display.getText() + key);
    firstDigit = false;
}

運算子處理(含除零、倒數零保護)

private double number = 0.0;
private String operator = "=";
private void handleOperator(String key) {
    double displayVal = getNumberFromDisplay();
    switch (operator) {
        case "/":  if (displayVal == 0) { showError("除數不能為零"); return; }
                   number /= displayVal; break;
        case "1/x": if (number == 0) { showError("零沒有倒數"); return; }
                    number = 1 / number; break;
        case "+": number += displayVal; break;
        case "-": number -= displayVal; break;
        case "*": number *= displayVal; break;
        case "sqrt": number = Math.sqrt(number); break;
        case "%": number /= 100; break;
        case "+/-": number *= -1; break;
        case "=": number = displayVal; break;
    }
    // 整數顯示優化
    long l = (long) number;
    display.setText((number - l == 0) ? String.valueOf(l) : String.valueOf(number));
    operator = key;
    firstDigit = true;
}

介面佈局

// 頂列:指令鍵 (Backspace, CE, C)
JPanel command = new JPanel(new GridLayout(1,3,3,3));
// 中列:數字/運算鍵 4x5
JPanel calckeys = new JPanel(new GridLayout(4,5,3,3));
// 左列:記憶體鍵 5x1
JPanel calms = new JPanel(new GridLayout(5,1,3,3));
// 組合
JPanel panel1 = new JPanel(new BorderLayout(3,3));
panel1.add(command, BorderLayout.NORTH);
panel1.add(calckeys, BorderLayout.CENTER);
JPanel top = new JPanel(new BorderLayout());
top.add(display, BorderLayout.CENTER);
getContentPane().setLayout(new BorderLayout(3,5));
getContentPane().add(top, BorderLayout.NORTH);
getContentPane().add(panel1, BorderLayout.CENTER);
getContentPane().add(calms, BorderLayout.WEST);

雙模式啟動

  • Applet:init() 自動建構介面、註冊監聽器。
  • Application:main() 建立 JFrame、加入 Calculator 實例、設定視窗屬性。

編譯執行

javac Calculator.java
# Applet 模式
appletviewer Calculator.html
# 應用程式模式
java Calculator

擴充建議

  1. 引入 ScriptEngineManager (JavaScript) 實現運算式解析,取代手寫邏輯。
  2. 加入鍵盤綁定 (KeyBinding) 支援實體鍵盤輸入。
  3. 支援歷史紀錄面板、科學函數 (sin/cos/log/^)。
  4. 使用 BigDecimal 解決浮點數精度問題。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved