0

0

Java初学者项目实战:实现一个基础的计算器小游戏

P粉602998670

P粉602998670

发布时间:2026-01-11 15:42:44

|

163人浏览过

|

来源于php中文网

原创

按钮无响应的核心原因是事件监听器未正确绑定或 actionPerformed 方法位置错误,且未在 SwingUtilities.invokeLater 中初始化界面;小数点重复输入是因缺少当前数字的小数点状态判断;图标不显示是因资源路径未用 getClass().getResource() 加载。

java初学者项目实战:实现一个基础的计算器小游戏

Java中用Swing写计算器界面,为什么按钮点击没反应?

核心问题通常是事件监听器没正确绑定,或者把 actionPerformed 方法写在了错误位置(比如没实现 ActionListener 接口,或忘了调用 button.addActionListener(this))。Swing 是单线程模型,所有 UI 更新必须在事件调度线程(EDT)中进行,但初学者常直接在 main 方法里 new 对象后就调用 setVisible(true),没用 SwingUtilities.invokeLater 包裹——这会导致部分系统下界面卡死或响应异常。

  • 确保类声明 implements ActionListener
  • 每个按钮都要显式调用 addActionListener(this)(不能只对一个按钮加)
  • main 方法里初始化窗口必须包在 SwingUtilities.invokeLater
  • 避免在 actionPerformed 里直接操作非 final 的局部变量;如需更新显示,应操作类成员变量 displayTextJTextField 实例

如何安全处理“+−×÷”和等号的运算逻辑?

初学者容易把所有数字和符号一股脑拼成字符串再用 eval 解析——Java 没内置 eval,硬写解析器又太重。更稳妥的做法是采用「双」或「状态机」思路:记录上一个数字、当前运算符、是否等待输入下一个数字。关键不是立刻计算,而是延迟到按 = 或下一个运算符时才结算上一步。

  • double currentNumber = 0 存当前输入的数,char lastOperator = '+' 记上一个操作符,double result = 0 存累计结果
  • 遇到数字键:用 currentNumber = currentNumber * 10 + digit 累加(注意小数点需额外标记)
  • 遇到 +//×/÷:先按 lastOperatorcurrentNumber 合并进 result,再更新 lastOperator 和清空 currentNumber
  • 遇到 =:最后执行一次合并,并显示 result

为什么输入小数点后连续点多次,界面上显示“1.23...”?

没做小数点防重逻辑。每次点击 . 都无条件拼接,导致字符串出现多个点。正确做法是在当前输入字段中检查是否已存在小数点,且仅当当前数字部分(即上一个运算符之后的内容)还没有小数点时才允许添加。

  • 不要依赖 displayText.getText().contains(".") 全局判断——它会把历史表达式里的点也计入
  • 应在每次新数字开始输入时重置一个布尔标志 hasDecimalPoint = false
  • 点击数字或小数点时,只检查当前待输入的这个数是否已有小数点(例如用 currentNumberAsString.indexOf('.') == -1
  • 一旦触发运算符(如 +),就重置 hasDecimalPoint = false,为下个数字做准备
public void actionPerformed(ActionEvent e) {
    String cmd = e.getActionCommand();
    if (cmd.matches("\\d")) {
        int digit = Integer.parseInt(cmd);
        currentNumber = currentNumber * 10 + digit;
        updateDisplay(currentNumber + "");
    } else if (cmd.equals(".")) {
        if (!currentNumberAsString.contains(".")) {
            currentNumberAsString += ".";
            updateDisplay(currentNumberAsString);
        }
    } else if (cmd.equals("=")) {
        // 执行最终计算...
    }
}

打包成可运行jar时,图标和窗口标题不显示?

因为资源路径写死了相对路径(如 "images/icon.png"),而 jar 包内资源必须用 getClass().getResource() 加载。另外,JFrame.setIconImage() 要求传入 Image 对象,不能直接传路径字符串。

FreeTTS
FreeTTS

FreeTTS是一个免费开源的在线文本到语音生成解决方案,可以将文本转换成MP3,

下载

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

  • 图标资源应放在 src/main/resources/icons/icon.png(Maven 结构)或与 class 同级的 resources/ 目录下
  • 加载方式必须是:ImageIcon icon = new ImageIcon(getClass().getResource("/icons/icon.png"))
  • 设置图标前要确保 icon.getImage() != null,否则静默失败
  • 窗口标题用 frame.setTitle("简易计算器") 即可,无需额外资源

实际开发中,最易被忽略的是事件线程安全和小数点状态管理——前者导致偶发 UI 冻结,后者让程序看起来“能输但算不对”。这两个点不解决,功能看似完整,实则不可靠。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

831

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

737

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

733

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

396

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

398

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

446

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

430

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

16925

2023.08.03

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

80

2026.01.09

热门下载

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

精品课程

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

共23课时 | 2.4万人学习

C# 教程
C# 教程

共94课时 | 6.5万人学习

Java 教程
Java 教程

共578课时 | 44.8万人学习

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

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