Java简易计算器(Swing图形界面版)

## 一、功能介绍

这是一个基于Java Swing的简易计算器,拥有图形化界面,适合Java初学者学习GUI编程。计算器支持基本的加减乘除运算,界面简洁美观,操作简单易用。

### 主要功能:
– ✅ 加法运算
– ✅ 减法运算
– ✅ 乘法运算
– ✅ 除法运算
– ✅ 小数点运算
– ✅ 清零功能
– ✅ 退格功能
– ✅ 图形化界面,操作直观

技术特点:
– 使用Java Swing库构建图形界面
– 纯Java代码,无需任何第三方库
– 界面简洁美观,类似Windows计算器
– 代码结构清晰,注释详细,适合学习
– 支持键盘和鼠标两种操作方式

## 二、小白手把手教程

如果你是完全的编程小白,没关系,跟着下面的步骤一步步来,保证你能成功运行!

### 第一步:安装JDK(Java开发工具包)

JDK是运行Java程序必须的环境,就像你要玩游戏需要先安装游戏引擎一样。

1. 打开浏览器,搜索”JDK下载”,或者直接去Oracle官网下载
2. 选择适合你电脑系统的版本(Windows选Windows版,Mac选Mac版)
3. 下载后双击安装包,一直点”下一步”就可以安装完成
4. **重要提示**:记住你的安装路径,后面配置环境变量会用到

### 第二步:配置环境变量

配置环境变量是为了让电脑在任何地方都能找到Java命令,就像给电脑设置一个”快捷方式”。

**Windows系统配置方法:**
1. 右键点击”此电脑”,选择”属性”
2. 点击”高级系统设置”
3. 点击”环境变量”
4. 在”系统变量”里点击”新建”
– 变量名:`JAVA_HOME`
– 变量值:你的JDK安装路径(比如 `C:\Program Files\Java\jdk1.8.0_202`)
5. 找到”Path”变量,点击”编辑”
6. 点击”新建”,输入 `%JAVA_HOME%\bin`
7. 一路点击”确定”保存

### 第三步:验证Java环境

安装配置完成后,我们来验证一下是否成功:

1. 按 `Win + R` 键,输入 `cmd`,回车打开命令提示符
2. 输入 `java -version`,回车
3. 如果显示出Java版本信息,说明安装成功了!
4. 再输入 `javac -version`,回车
5. 如果也显示版本信息,说明编译器也没问题了

### 第四步:保存代码

1. 在电脑上新建一个文件夹,比如叫 `Calculator`
2. 在文件夹里新建一个文本文件
3. 文件命名为 `Calculator.java`(注意后缀是.java,不是.txt)
4. 把下面的源码复制到文件里保存

**重要提示**:文件名必须和类名完全一致,包括大小写!否则会编译失败。

### 第五步:编译运行

1. 打开命令提示符(cmd)
2. 用 `cd` 命令进入你的代码文件夹,比如:
“`
cd C:\Calculator
“`
3. 输入编译命令:
“`
javac Calculator.java
“`
4. 如果没有报错,说明编译成功了!文件夹里会多出一个.class文件
5. 输入运行命令:
“`
java Calculator
“`
6. 恭喜你!计算器运行起来了!

### 第六步:使用方法

计算器运行后,会弹出一个图形化窗口,你可以:
– 用鼠标点击数字和运算符按钮进行计算
– 点击”=”按钮得到计算结果
– 点击”C”按钮清零
– 点击”←”按钮退格
– 支持小数点运算

就像你平时用的计算器一样简单!

## 三、运行效果

下面是程序运行后的实际效果截图,大家可以参考一下:

(图片展示:计算器主界面、按钮操作效果

java_calculator_screenshot1

java_calculator_screenshot2

 

## 四、完整源码

下面是完整的Java代码,大家可以直接复制使用:

Calculator.java(主程序类)

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
 * Java简易计算器(Swing图形界面版)
 * 功能:带GUI界面的计算器,支持加减乘除运算
 */
public class Calculator extends JFrame implements ActionListener {
    
    // 组件声明
    private JTextField display;     // 显示框
    private String currentInput;    // 当前输入
    private double result;          // 计算结果
    private String operator;        // 当前运算符
    private boolean newNumber;      // 是否是新数字
    
    public Calculator() {
        // 初始化变量
        currentInput = "0";
        result = 0;
        operator = "";
        newNumber = true;
        
        // 设置窗口
        setTitle("简易计算器");
        setSize(300, 400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null); // 居中显示
        setResizable(false);
        
        // 创建面板
        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BorderLayout(10, 10));
        mainPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
        
        // 创建显示框
        display = new JTextField("0");
        display.setEditable(false);
        display.setFont(new Font("Arial", Font.BOLD, 30));
        display.setHorizontalAlignment(JTextField.RIGHT);
        display.setPreferredSize(new Dimension(280, 60));
        mainPanel.add(display, BorderLayout.NORTH);
        
        // 创建按钮面板
        JPanel buttonPanel = new JPanel();
        buttonPanel.setLayout(new GridLayout(5, 4, 5, 5));
        
        // 按钮文本
        String[] buttonLabels = {
            "C", "←", "%", "÷",
            "7", "8", "9", "×",
            "4", "5", "6", "-",
            "1", "2", "3", "+",
            "±", "0", ".", "="
        };
        
        // 创建按钮并添加到面板
        for (String label : buttonLabels) {
            JButton button = new JButton(label);
            button.setFont(new Font("Arial", Font.BOLD, 18));
            button.addActionListener(this);
            
            // 设置特殊按钮的颜色
            if (label.equals("=")) {
                button.setBackground(new Color(70, 130, 180));
                button.setForeground(Color.WHITE);
            } else if (label.equals("+") || label.equals("-") || 
                       label.equals("×") || label.equals("÷")) {
                button.setBackground(new Color(255, 165, 0));
                button.setForeground(Color.WHITE);
            } else if (label.equals("C") || label.equals("←") || label.equals("%")) {
                button.setBackground(new Color(200, 200, 200));
            }
            
            buttonPanel.add(button);
        }
        
        mainPanel.add(buttonPanel, BorderLayout.CENTER);
        
        // 添加主面板到窗口
        add(mainPanel);
    }
    
    @Override
    public void actionPerformed(ActionEvent e) {
        String command = e.getActionCommand();
        
        if (command.charAt(0) >= '0' && command.charAt(0) <= '9') {
            // 数字按钮
            handleNumber(command);
        } else if (command.equals(".")) {
            // 小数点
            handleDecimal();
        } else if (command.equals("+") || command.equals("-") || 
                   command.equals("×") || command.equals("÷")) {
            // 运算符
            handleOperator(command);
        } else if (command.equals("=")) {
            // 等号
            handleEquals();
        } else if (command.equals("C")) {
            // 清除
            handleClear();
        } else if (command.equals("←")) {
            // 退格
            handleBackspace();
        } else if (command.equals("±")) {
            // 正负号
            handleNegate();
        } else if (command.equals("%")) {
            // 百分比
            handlePercent();
        }
    }
    
    // 处理数字输入
    private void handleNumber(String num) {
        if (newNumber) {
            currentInput = num;
            newNumber = false;
        } else {
            if (currentInput.equals("0")) {
                currentInput = num;
            } else {
                currentInput += num;
            }
        }
        updateDisplay();
    }
    
    // 处理小数点
    private void handleDecimal() {
        if (newNumber) {
            currentInput = "0.";
            newNumber = false;
        } else if (!currentInput.contains(".")) {
            currentInput += ".";
        }
        updateDisplay();
    }
    
    // 处理运算符
    private void handleOperator(String op) {
        if (!operator.isEmpty() && !newNumber) {
            handleEquals();
        }
        result = Double.parseDouble(currentInput);
        operator = op;
        newNumber = true;
    }
    
    // 处理等号
    private void handleEquals() {
        if (operator.isEmpty()) {
            return;
        }
        
        double secondNum = Double.parseDouble(currentInput);
        
        switch (operator) {
            case "+":
                result += secondNum;
                break;
            case "-":
                result -= secondNum;
                break;
            case "×":
                result *= secondNum;
                break;
            case "÷":
                if (secondNum == 0) {
                    currentInput = "错误";
                    updateDisplay();
                    operator = "";
                    newNumber = true;
                    return;
                }
                result /= secondNum;
                break;
        }
        
        // 格式化结果,去掉多余的0
        if (result == (long) result) {
            currentInput = String.valueOf((long) result);
        } else {
            currentInput = String.valueOf(result);
        }
        
        operator = "";
        newNumber = true;
        updateDisplay();
    }
    
    // 处理清除
    private void handleClear() {
        currentInput = "0";
        result = 0;
        operator = "";
        newNumber = true;
        updateDisplay();
    }
    
    // 处理退格
    private void handleBackspace() {
        if (currentInput.length() > 1) {
            currentInput = currentInput.substring(0, currentInput.length() - 1);
        } else {
            currentInput = "0";
        }
        updateDisplay();
    }
    
    // 处理正负号
    private void handleNegate() {
        if (!currentInput.equals("0")) {
            if (currentInput.startsWith("-")) {
                currentInput = currentInput.substring(1);
            } else {
                currentInput = "-" + currentInput;
            }
            updateDisplay();
        }
    }
    
    // 处理百分比
    private void handlePercent() {
        double num = Double.parseDouble(currentInput);
        num = num / 100;
        if (num == (long) num) {
            currentInput = String.valueOf((long) num);
        } else {
            currentInput = String.valueOf(num);
        }
        updateDisplay();
    }
    
    // 更新显示
    private void updateDisplay() {
        display.setText(currentInput);
    }
    
    public static void main(String[] args) {
        // 在事件调度线程中运行GUI
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Calculator().setVisible(true);
            }
        });
    }
}

 

java_calculator_screenshot1

java_calculator_screenshot2

 

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容