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

Java 實作簡易計算機:Swing GUI 範例教學

     編輯:Java 相關知識

程式架構概覽

本範例展示使用 Java Swing 建立桌面計算機應用程式,採用標準 MVC 概念分離:

  • CalculatorPanel:視圖與控制器合一,處理 UI 佈局、按鈕事件與計算邏輯
  • CalculatorFrame:主視窗容器,管理視窗生命週期
  • Calculator:程式進入點

核心元件實作

CalculatorPanel:介面佈局與事件處理

class CalculatorPanel extends JPanel implements ActionListener {
    private JTextField display;
    private double arg = 0;
    private String op = "=";
    private boolean start = true;

    public CalculatorPanel() {
        setLayout(new BorderLayout());
        display = new JTextField("0");
        display.setEditable(false);
        add(display, BorderLayout.NORTH);

        JPanel p = new JPanel();
        p.setLayout(new GridLayout(4, 4));
        String buttons = "789/456*123-0.=+";
        for (int i = 0; i < buttons.length(); i++) {
            addButton(p, buttons.substring(i, i + 1));
        }
        add(p, BorderLayout.CENTER);
    }

    private void addButton(Container c, String s) {
        JButton b = new JButton(s);
        c.add(b);
        b.addActionListener(this);
    }
    // ... 事件處理與計算邏輯見下
}

按鍵事件處理邏輯

actionPerformed(ActionEvent evt) 依按鍵類型分派:

  • 數字鍵 (0-9) 與小數點:start 標記控制是否為新輸入,決定覆蓋或追加顯示
  • 運算子 (+, -, *, /, =):
    • 若為首次輸入且為減號,允許輸入負數
    • 否則解析當前顯示值,呼叫 calculate() 執行前一運算,更新 op 為新運算子,設 start=true 準備下一輸入

計算核心邏輯

public void calculate(double n) {
    if (op.equals("+")) arg += n;
    else if (op.equals("-")) arg -= n;
    else if (op.equals("*")) arg *= n;
    else if (op.equals("/")) arg /= n;
    else if (op.equals("=")) arg = n;
    display.setText("" + arg);
}

累加器 arg 保存運算中間結果,op 記錄待執行運算子,模擬傳統計算機即時運算模式。

CalculatorFrame:主視窗設定

class CalculatorFrame extends JFrame {
    public CalculatorFrame() {
        setTitle("Calculator");
        setSize(200, 200);
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        getContentPane().add(new CalculatorPanel());
    }
}

程式進入點

public class Calculator {
    public static void main(String[] args) {
        JFrame frame = new CalculatorFrame();
        frame.show(); // 注意:show() 已棄用,建議改用 setVisible(true)
    }
}

執行畫面

計算機執行畫面

改進建議

  • 使用 setVisible(true) 取代棄用的 show()
  • 加入除零錯誤處理
  • 支援鍵盤輸入
  • 使用 BigDecimal 避免浮點數精度問題
  • 採用更完整的 MVC 分離架構

學習重點總結

  1. Swing 容器層級佈局(BorderLayout + GridLayout)
  2. 事件監聽器模式(ActionListener)
  3. 狀態機思維處理計算機輸入流程
  4. 匿名內部類處理視窗關閉事件
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved