## 一、功能介绍
这是一个基于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.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);
}
});
}
}










暂无评论内容