news 2026/6/13 13:12:04

案例7:图形界面计算器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
案例7:图形界面计算器

以下是一个Java图形界面计算器的案例,它展示了如何使用Java Swing库来创建一个简单的计算器应用程序。这个计算器具有基本的加减乘除功能,以及开平方和清零功能。

一、设计目标

  1. 实现简单的加、减、乘、除等双目运算。

  2. 实现开平方等单目运算。

  3. 提供清零功能,用于清空文本框。

二、界面设计

  1. 创建一个主窗口(JFrame)。

  2. 在窗口中添加一个文本框(JTextField),用于显示输入和计算结果。

  3. 在窗口中添加一个面板(JPanel),并使用GridLayout布局管理器来排列按钮。

  4. 在面板上添加数字按钮(0-9)、运算符按钮(+、-、*、/)、开平方按钮(sqrt)、小数点按钮(.)和等号按钮(=),以及清零按钮(C)。

三、功能实现

  1. 创建主窗口和组件:

import javax.swing.*;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

public class Calculator extends JFrame implements ActionListener {

private JTextField textField; // 输入文本框 private JPanel panel; // 面板 private JButton[] buttons; // 按钮数组 public Calculator() { setTitle("计算器"); setSize(300, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); // 窗口居中 textField = new JTextField(); textField.setEditable(false); // 禁止直接编辑文本框 textField.setHorizontalAlignment(JTextField.RIGHT); // 文本右对齐 textField.setFont(new Font("Arial", Font.BOLD, 20)); // 设置字体 panel = new JPanel(); panel.setLayout(new GridLayout(5, 4, 5, 5)); // 5行4列,间距5 String[] buttonLabels = { "7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", "0", ".", "sqrt", "+", "C", "=", "", "" // C为清零,=为等号,后两个空位用于布局 }; buttons = new JButton[buttonLabels.length]; for (int i = 0; i < buttonLabels.length; i++) { buttons[i] = new JButton(buttonLabels[i]); buttons[i].addActionListener(this); // 添加事件监听器 panel.add(buttons[i]); } add(textField, BorderLayout.NORTH); // 文本框放在北边 add(panel, BorderLayout.CENTER); // 面板放在中间 }
  1. 实现事件处理:

@Override

public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); StringBuilder input = new StringBuilder(textField.getText()); switch (command) { case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".": input.append(command); break; case "+", "-", "*", "/", "sqrt": if (!input.toString().trim().isEmpty()) { input.append(" ").append(command).append(" "); } else { input.append(command).append(" "); // 开平方前需要空格以区分单目运算 } break; case "C": input.setLength(0); // 清空输入 break; case "=": try { String result = evaluate(input.toString()); textField.setText(result); } catch (Exception ex) { textField.setText("错误: " + ex.getMessage()); } input.setLength(0); // 清空输入以便下次计算 break; } textField.setText(input.toString()); } // 计算表达式的结果 private String evaluate(String expression) throws Exception { // 简单的表达式解析和计算逻辑,这里使用栈来处理 // 注意:这个实现仅用于演示,并未处理所有可能的错误情况 String[] tokens = expression.split(" "); Stack<Double> stack = new Stack<>(); for (String token : tokens) { if (!token.isEmpty()) { if (isOperator(token)) { double b = stack.pop(); double a = stack.pop(); stack.push(calculate(a, b, token)); } else if (token.equals("sqrt")) { double a = stack.pop(); stack.push(Math.sqrt(a)); } else { stack.push(Double.parseDouble(token)); } } } return stack.pop().toString(); } // 判断是否为运算符 private boolean isOperator(String token) { return token.equals("+") || token.equals("-") || token.equals("*") || token.equals("/"); } // 执行基本的算术运算 private double calculate(double a, double b, String operator) throws Exception { switch (operator) { case "+": return a + b; case "-": return a - b; case "*": return a * b; case "/": if (b == 0) throw new Exception("被除数不能为0"); return a / b; default: throw new Exception("未知运算符: " + operator); } }
  1. 启动应用程序:

public static void main(String[] args) {

SwingUtilities.invokeLater(() -> { Calculator calculator = new Calculator(); calculator.setVisible(true); }); }

}

四、功能测试

  1. 运行程序,确保窗口正常显示。

  2. 输入数字和运算符,点击等号查看计算结果。

  3. 测试开平方功能。

  4. 测试清零功能。

这个案例展示了如何使用Java Swing库来创建一个基本的图形界面计算器。你可以根据需要进一步扩展和完善这个计算器,例如添加更多的数学函数、改进错误处理、优化用户界面等。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/13 13:11:58

3分钟搞定?让你的网易云音乐焕然一新

3分钟搞定&#xff1f;让你的网易云音乐焕然一新 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 你是否觉得网易云音乐的功能总是差那么一点点&#xff1f;想要更炫酷的歌词效果&#…

作者头像 李华
网站建设 2026/6/13 13:11:23

工业级遗传算法实战:精度、效率与鲁棒性三角平衡

1. 项目概述&#xff1a;为什么“遗传算法第二讲”比第一讲更值得细读“遗传算法”这个词&#xff0c;刚接触时容易被名字带偏——听起来像生物课&#xff0c;又像编程课&#xff0c;结果两边都不靠。我第一次在实验室跑通GA代码时&#xff0c;手里的《人工智能导论》第7章写着…

作者头像 李华
网站建设 2026/6/13 13:11:04

保姆级教程:用Python的pywifi和qrcode库,打造你的Windows Wi-Fi密码管理器

用Python构建Windows Wi-Fi密码管理器&#xff1a;从二维码生成到安全存储每次家里来客人询问Wi-Fi密码时&#xff0c;你是否也经历过翻箱倒柜找小纸条的尴尬&#xff1f;或者当自己更换设备时&#xff0c;突然记不起那个复杂密码&#xff1f;今天我们将用Python打造一个智能解…

作者头像 李华
网站建设 2026/6/13 13:09:53

MC9328MX1蓝牙硬件唤醒机制:低功耗嵌入式开发的核心技术

1. 项目概述与核心价值在嵌入式蓝牙产品的开发中&#xff0c;尤其是在电池供电的便携式设备上&#xff0c;如何平衡性能与功耗是一个永恒的挑战。设备不可能一直满负荷运行&#xff0c;大部分时间可能处于空闲或深度休眠状态&#xff0c;但又要能随时响应连接请求或定时任务。这…

作者头像 李华