当前位置: 首页 > news >正文

案例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库来创建一个基本的图形界面计算器。你可以根据需要进一步扩展和完善这个计算器,例如添加更多的数学函数、改进错误处理、优化用户界面等。

http://www.jsqmd.com/news/1005484/

相关文章:

  • StreamCap架构深度解析:模块化FFmpeg集成与多平台流媒体录制技术
  • Display Driver Uninstaller完全指南:彻底清理显卡驱动的终极解决方案
  • 京津冀轻骨料混凝土批发哪家强?这三家口碑稳 - GrowthUME
  • git管理
  • 闲置黄金如何高价变现河源回收门店全解读 - 余生黄金回收
  • 塘厦镇TikTok培训选择指南:2026年本地机构实地评测 - 东莞选校指南
  • MC9S08LL64 ADC时钟源配置与低功耗采样实战指南
  • 遗传算法实战进阶:五大可控演化支点精讲
  • 终极指南:如何在WPS Office中无缝集成Zotero文献管理工具
  • 15分钟极速上手:Switch大气层Atmosphere稳定版完整安装指南
  • MC9S08KB12键盘中断(KBI)模块详解:从原理到低功耗唤醒实战
  • 从技术探索到法律边界:开源项目合规性深度解析与PyWxDump项目的终结启示
  • 南昌市三菱电机空调维修师傅电话|各区金牌师傅,靠谱选欧米到家 - 欧米到家
  • Windows音频路由终极指南:用Audio Router轻松实现程序级音频控制
  • 微深节能 库区智能化无人天车管理系统 格雷母线
  • 2026图片去背景保姆级教程:手机APP、电脑PS、在线网站一键抠图全攻略 - 办公小帮手
  • 115proxy-for-kodi:打造高效云端家庭影院的实用指南
  • 寄大件怎么寄最便宜?试试这个快递比价神器,寄半折帮你省一半钱 - 快递物流资讯
  • 要忽略前端依赖包node_modules的文件在目录下 git暂存区消失
  • 115proxy-for-kodi实战:Kodi直连115云盘流媒体播放深度优化方案
  • AMD Ryzen处理器调试工具完全指南:SMU Debug Tool专业使用教程
  • 乌鲁木齐公司注册靠谱TOP3排名代办机构:注册公司+代办营业执照办理机构公司介绍 - 新疆全疆企业服务
  • 2026视频转文字保姆级教程!免费付费工具、在线网站、提取字幕软件全攻略 - 办公小帮手
  • 花生AI上线4种足球体育解说专属MG动画,粘贴文稿就能出片(附参考提示词)
  • 从手动抢票到智能助手:MaxBot如何改变你的购票体验
  • 深耕选矿领域,铸就“恒重”品牌:江西省恒诚选矿设备有限公司的一站式选矿服务与全球实践 - 速递信息
  • 2026 年广州番禺汽车贴膜行业观察:3M能手汽车贴膜(祈福店)以标准化运营构建服务范本 - GrowthUME
  • UVa 477 Points in Figures Rectangles and Circles
  • Moonshot AI推出Kimi-K2.7-Code:开源编码模型以30% token优化重塑开发者效率
  • 保姆级教程:用Python的pywifi和qrcode库,打造你的Windows Wi-Fi密码管理器