讲师中心 微信公众号
AI工具推荐 视频效率加速

在Java中如何用Swing实现一个简易计算器_Java图形界面编程实战说明

胖宇小哥_7128

胖宇小哥_7128

发布时间:2026-02-04 09:36:32

|

354人浏览过

|

来源于php中文网

原创

用JFrame+GridLayout搭计算器最稳妥,因其布局可控、事件响应明确;GridLayout保证4×5按钮网格整齐对齐,代码量少且逻辑直白;需注意行数在前(5行)、列数在后(4列),显示屏用setEditable(false)的JTextField,按钮统一监听,用pack()自适应尺寸。

在java中如何用swing实现一个简易计算器_java图形界面编程实战说明

为什么直接用 JFrame + GridLayout 搭按钮最稳妥

Swing 做计算器,核心是布局可控、事件响应明确。用 BorderLayout 或绝对定位容易错位,尤其在窗口缩放或不同 DPI 下;GridLayout 能保证 4×5(含显示屏)按钮网格整齐对齐,且代码量最少、逻辑最直白。

实操建议:

  • 用 new GridLayout(5, 4) 创建面板,注意行数在前(5 行:显示屏 + 4 行按钮),列数在后(4 列)
  • 显示屏用 JTextField,设为 setEditable(false),避免键盘误输
  • 所有数字和运算符按钮统一用 addActionListener(this),在 actionPerformed 中用 e.getActionCommand() 区分操作
  • 别忘了调用 pack() 而非 setSize(),让组件自适应尺寸

actionPerformed 里怎么安全处理连续点击和双符号

用户可能连点 +、输入 12+3+5 或误按 ==,硬编码判断容易漏 case。关键是把状态拆成三部分:当前输入值、上一个运算符、是否等待新数字。

常见错误现象:

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

  • 点两次 + 后再输数字,结果变成 0+数字(没保留上次计算中间值)
  • 点 = 后继续输数字,没清空屏幕或重置状态,导致拼接错误表达式

推荐做法:

Java Api Extractor
Java Api Extractor

从 Java 项目中提取 Controller 层接口定义为 JSON 数据。

下载
  • 用三个字段:private double lastValue(上次参与运算的数)、private String pendingOperator(待执行的运算符)、private boolean startNewNumber(标识下一次输入是否覆盖显示)
  • 遇到数字按钮时:若 startNewNumber 为 true,清空文本框并设为 false;否则追加字符
  • 遇到运算符按钮时:先尝试执行上一次未完成的计算(如果有 pendingOperator),再更新 pendingOperator 和 lastValue
  • = 按钮只触发一次计算,之后设 startNewNumber = true,允许输入新数字

为什么不用 Double.parseDouble() 直接转字符串表达式

初学者常想把整个屏幕字符串(如 "12+3*5")丢给 parseDouble,这会抛 NumberFormatException —— 它只能转纯数字字符串,不支持表达式求值。

正确路径只有两条:

  • 简单计算器:只支持单步运算(如 12 + 3 =),每次只记一个操作符和两个操作数,用 switch 分支做四则运算
  • 稍进阶:手写简易表达式解析器,用两个栈(数字栈、运算符栈),按优先级弹出计算(适合练手,但别在作业里硬套 Shunting Yard 算法)

千万别引入 javax.script.ScriptEngine——虽然能跑 "12+3*5",但它启动慢、有安全风险、Swing 主线程阻塞明显,且偏离“理解事件流与状态管理”的教学目标。

字体和监听器泄漏这两个细节最容易被忽略

计算器界面太小字看不清,但直接 setFont(new Font("Arial", 0, 18)) 在 Linux 或 macOS 上可能 fallback 成方块;另外,反复 addActionListener 却不 removeActionListener,会导致旧按钮仍响应事件(尤其在动态重建面板时)。

解决方式很具体:

  • 用 UIManager.put("Label.font", new Font("Dialog", Font.PLAIN, 16)) 统一设置系统级默认字体,比逐个设更可靠
  • 按钮初始化只做一次:在构造函数里创建按钮数组,循环添加监听器,不要在事件处理中重复 add
  • 如果真要动态刷新界面(比如切换主题),先用 button.removeActionListener(this) 清理,再重建

真正卡住人的往往不是算法,而是 startNewNumber 没在该设 true 的时候设,或者字体在高分屏上缩成一条线——这些得运行起来点几遍才看得见。

热门AI工具

更多
讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

7099

2023.08.02

java中boolean的用法
java中boolean的用法

在Java中,boolean是一种基本数据类型,它只有两个可能的值:true和false。boolean类型经常用于条件测试,比如进行比较或者检查某个条件是否满足。想了解更多java中boolean的相关内容,可以阅读本专题下面的文章。

2150

2023.11.13

java boolean类型
java boolean类型

本专题整合了java中boolean类型相关教程,阅读专题下面的文章了解更多详细内容。

163

2025.11.30

java基础知识汇总
java基础知识汇总

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

6284

2023.10.24

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

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

3304

2024.02.23

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

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

1892

2025.10.17

switch语句用法
switch语句用法

switch语句用法:1、Switch语句只能用于整数类型,枚举类型和String类型,不能用于浮点数类型和布尔类型;2、每个case语句后面必须跟着一个break语句,以防止执行其他case的代码块,没有break语句,将会继续执行下一个case的代码块;3、可以在一个case语句中匹配多个值,使用逗号分隔;4、Switch语句中的default代码块是可选的等等。

1071

2023.09.21

Java switch的用法
Java switch的用法

Java中的switch语句用于根据不同的条件执行不同的代码块。想了解更多switch的相关内容,可以阅读本专题下面的文章。

1437

2024.03.13

Docker Desktop怎么设置端口映射
Docker Desktop怎么设置端口映射

本专题聚焦Docker Desktop容器端口映射与访问配置,整理从创建容器、设置端口绑定到验证本地服务访问的操作流程。针对端口被占用、映射配置错误、容器服务无法访问等情况,也提供相应的检查方向,方便用户完成端口配置。

0

2026.11.03

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn