0

0

在Java里如何实现一个简单的图形计算器_Java面向对象编程实践

P粉602998670

P粉602998670

发布时间:2026-02-16 12:37:02

|

759人浏览过

|

来源于php中文网

原创

swing实现图形计算器需用jframe主窗、jtextfield显示(seteditable(false))、jbutton布局;推荐gridlayout(4,4)或gridbaglayout;数字/运算符/等号/清屏逻辑分离;双栈法解析中缀表达式,处理负数、优先级、异常提示。

在java里如何实现一个简单的图形计算器_java面向对象编程实践

用Swing写一个带按钮和文本框的计算器界面

Java里实现图形计算器,Swing仍是最轻量、无需额外依赖的选择。核心是用 JFrame 作主窗口,JTextField 显示表达式和结果,JButton 布局数字与运算符。

常见错误是直接把所有按钮逻辑写在 actionPerformed 里堆 if-else,后期难维护。建议按功能拆:数字输入、运算符暂存、等号触发计算、清屏单独响应。

  • JTextField 要设为不可编辑(setEditable(false)),避免用户乱输
  • 按钮网格推荐用 GridLayout(4, 4),但注意“0”按钮需占两列,得用 GridBagLayout 或手动加空组件占位
  • 监听器别匿名内部类写太长,可提取为私有方法,比如 handleDigitClick(int digit)

用双栈法解析中缀表达式并计算结果

图形界面只负责展示和输入,真正算数不能靠 eval()(Java 没内置 JS 那种函数)。必须自己解析字符串——推荐双栈:一个存数字,一个存运算符,按优先级弹出计算。

这个逻辑容易漏掉负数开头(如 "-5+3")或括号嵌套。别手写递归下降,先处理基础四则运算即可。

立即学习Java免费学习笔记(深入)”;

  • 扫描字符时,连续数字要拼成完整整数,不能单个字符转 int
  • 遇到 '+''-',需判断是运算符还是正负号:若在开头、左括号后、或前一个是运算符,就是正负号,应和下一个数字一起入数字栈
  • 乘除优先级高于加减,遇到 '*'/'/' 可立即计算,不用等 '='
  • 括号用递归或栈模拟,但简单计算器可先不支持,避免复杂度飙升

处理异常输入和边界情况

用户乱按一通后点等号,程序不能崩溃。重点拦截三类问题:NumberFormatException(非数字字符)、除零、空表达式。

今天学点啥
今天学点啥

秘塔AI推出的AI学习助手

下载

不要在计算方法里 try-catch 后吞掉异常并返回 0——这会让用户不知道哪错了。应在界面上给出明确提示,比如 JTextField 显示 "Error",再清空重置。

  • 输入为空或只有运算符时,点击 '=' 应忽略或提示
  • 除零时捕获 ArithmeticException,而不是等 JVM 抛出再崩掉 GUI 线程
  • 数字过大导致 Integer.MAX_VALUE 溢出?简单起见可先用 long,或加长度限制(如最多 10 位输入)
  • 小数点暂时不支持,避免引入 Double 和精度问题,专注整数四则

为什么不用 JavaFX 或第三方库

初学面向对象实践,目标是理解封装(每个按钮/显示区是独立对象)、继承(可抽象 CalculatorButton extends JButton)、多态(不同按钮响应不同行为),而不是比谁界面炫。

Swing 组件天然符合 OOP:你封装一个 CalcEngine 类负责计算逻辑,一个 CalcDisplay 类管理显示更新,一个 CalcController 协调二者——这比硬塞所有代码进 Main 类更能体现设计意图。

JavaFX 需要模块配置、FXML、绑定机制,对刚写完 Student 类的学生反而增加认知负担;而 Apache Commons Eval 这类库会掩盖表达式解析的关键过程,失去练习机会。

真正难的不是画按钮,而是让 7 + 8 * 2 算出 23 而不是 30,以及按完 1 / 0 = 后还能继续按 5 + 3 = ——这些细节,往往被截图教程跳过。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1552

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

236

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

127

2025.10.17

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

813

2023.08.22

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

57

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

60

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

22

2025.11.27

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

351

2023.10.18

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

145

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3.6万人学习

C# 教程
C# 教程

共94课时 | 9.5万人学习

Java 教程
Java 教程

共578课时 | 66.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号