当前位置: 首页 > 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.zskr.cn/news/1517267.html

相关文章:

  • 塘厦镇TikTok培训选择指南:2026年本地机构实地评测 - 东莞选校指南
  • 从技术探索到法律边界:开源项目合规性深度解析与PyWxDump项目的终结启示
  • AMD Ryzen处理器调试工具完全指南:SMU Debug Tool专业使用教程
  • 终极指南:如何用ViGEmBus虚拟游戏控制器驱动解决Windows游戏兼容性问题
  • 猫抓Cat-Catch技术揭秘:现代浏览器资源嗅探的五大架构革新
  • ARM9 MC9328MX1 GPIO与I/O复用机制详解:从原理到实战配置
  • 2026邯郸市芬迪、MCM、罗意威包包专业回收,2026甄选回收店铺排行榜推荐 - 谊识预商贸
  • 南昌市富士通将军中央空调维修师傅电话|各区金牌师傅,靠谱选欧米到家 - 欧米到家
  • 深入解析i.MX21 MMC/SDHC控制器:寄存器配置、中断与DMA实战
  • 2026金昌市圣罗兰+赛琳+巴黎世家包包专业回收,2026甄选回收店铺排行榜推荐 - 谊识预商贸
  • 2026免费录音转文字工具推荐,手把手教你多款转换方法 - 办公小帮手
  • 车载数字钥匙测距不准怎么解决?BLE 6.0 信道探测技术解析
  • 深入解析DLSS Swapper:多平台游戏DLSS版本管理实战指南
  • WEB应用技术第四次作业
  • 2026金华市芬迪、MCM、罗意威包包专业回收,2026甄选回收店铺排行榜推荐 - 谊识预商贸
  • 当你的Linux桌面收到Outlook邮件时:一个Java开发者的跨平台邮件查看方案
  • ChatGPT+SPC:AI帮我写出完美控制限(UCL/LCL计算全流程)
  • 常见内核panic错误排查
  • 金蝶K3 WISE数据瘦身实战:如何安全清理多年历史数据,只保留最近一年?
  • 别再只测WiFi了!用Fiddler手把手模拟2G/3G/4G/5G真实弱网环境(附详细延迟计算公式)
  • 2026广西黄金回收调研:南宁 柳州 桂林等14市黄金变现指南与五大品牌全测评 - 博客万
  • 告别文献引用噩梦:WPS-Zotero插件如何让科研写作效率提升10倍
  • Windows音频路由终极指南:用Audio Router实现多设备音频管理
  • MC9S08QE8深度解析:HCS08内核、低功耗与时钟系统设计实战
  • 硬件加速IPsec ESP协议:SEC引擎描述符与PDB配置实战
  • 2026贵港市爱马仕、香奈儿、路易威登LV包包专业回收,2026甄选回收店铺排行榜推荐 - 谊识预商务
  • 10分钟精通ExifToolGui:让照片元数据管理变得轻松简单
  • MiGPT终极指南:3步将小爱音箱升级为AI智能助手
  • 2026贵阳市迪奥、古驰、普拉达包包专业回收,2026甄选回收店铺排行榜推荐 - 谊识预商务
  • 2026国内雷达测速仪厂家推荐 雷达测速抓拍系统实测推荐 - 速递信息