Java实现GUI计算器【代码】
这几天用java写了一个计算器程序,开始写的时候原本只是想实现一下GUI(这个是直接读三个字母还是什么“固椅”的发音)界面,熟悉一下Java GUI 编程,为Java期末大作业练练手,本以为代码不会很长,结果写完下来发现到了惊人的千行数量级,我分析了一下,主要是在实现监听器的时候花了很大篇幅,主体程序应该会短不少。整个程序分为三个.java文件,分别为 Calculator.java EvaluateExpression.java Arith.java ,程序已放到Github上去了(https://github.com/JiaxinTse),首先是用户在界面上输入,然后输入完得到一个字符串,在用户按下等于号的时候把这个字符串传给EvaluateExpression.java里的一个中缀表达式求值函数,计算出结果,在传入表达式之前要对表达式进行括号匹配分析,由于计算器精度需要,又考虑到java中double型数据运算存在的潜在误差,于是重新实现了浮点数的加减乘除运算,原因是我遇到了这样一个问题(http://blog.csdn.net/jackiehff/article/details/8582449 )
程序花了很大篇幅阻止用户的非法输入,所以原本可以写的不是很长的监听器类最后变得很长,因为我觉得在用户输入的时候就尽可能地减少错误要比你先让用户随便输入最后对表达式进行综合分析要来得简单,下面简单列举一些阻止的非法输入:
):第一个符号就是右括号
(1+2)3:右括号后面直接接数字,类似的左括号也有这些情况
2.3.4:在一个数字上输入多个小数点
(*):括号后面直接接运算符
(1+2)*=:等号前面出现了非法符号
1+*2:连续输入运算符
等等...
这些判断是在用户输入阶段进行的,如果判断为非法,就不做任何处理,反应在程序界面上就是输入无反应,中缀表达式求值直接利用了我之前写的一个程序
(http://www.cnblogs.com/journal-of-xjx/p/5936448.html),但是由于java中没有指针,所以改用数组重新定义了栈,这次直接定义了两个栈,一个是操作数栈,一个是操作符栈,这一次也算是完善了上次那个程序,可以实现了负数和小数的计算了, 所以这次的中缀表达式程序比上次多了不少代码。
窗体的主要布局如下

整个界面模仿Win10自带的计算器

以下是整个界面各部分组件的布局

以下是弹出对话框的效果

上面的链接都是可以打开的哦
写了三天的时间,有兴趣的可以去我的github上看看
------------------------------------------------------------第二版更新-----------------------------------------------------------------
1.添加了部分功能
2.界面优化
以下是部分更新后的截图
1.启动程序图

2.关于界面图

3.计算过程图

Java实现GUI计算器【代码】的更多相关文章
- Java之GUI编程
GUI编程 组建 窗口 弹窗 面板 文本框 列表框 按钮 图片 监听事件 鼠标 键盘事件 破解工具 1.简介 GUI的核心技术:Swing AWT 为什么不流行? 界面不美观. 需要jre环境.(没必 ...
- 【Java】GUI编程
GUI编程 前言 某koukou老师的任务罢了,好在狂神老师居然有GUI的课,只能说是有救星了. [狂神说Java]GUI编程入门到游戏实战 最好笑的是,老师要求掌握的居然是14年的知识,就连狂神在上 ...
- 2.JAVA之GUI编程布局
布局管理器 容器中的组件排放方式,就是布局 常见的布局管理器: **************************************************** 1.FlowLayout(流式 ...
- 3.JAVA之GUI编程Frame窗口
创建图形化界面思路: 1.创建frame窗体: 2.对窗体进行基本设置: 比如大小.位置.布局 3.定义组件: 4.将组件通过add方法添加到窗体中: 5.让窗体显示,通过setVisible(tur ...
- 5.JAVA之GUI编程窗体事件
我们回顾下第三篇时的内容: 在3.JAVA之GUI编程Frame窗口中窗体是无法直接关闭的,想要关闭须进程管理器结束进程方式关掉. 现在我们就来解决下这个问题. ******************* ...
- 8.JAVA之GUI编程键盘码查询器
程序使用说明: 1.本程序由于是java代码编写,所以运行需安装jdk并配置好环境变量. 2. 复制java代码到记事本内,另存为Keyboard_events.java: 3.复制批处理代码到记事本 ...
- 9.JAVA之GUI编程列出指定目录内容
代码如下: /*列出指定目录内容*/ import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; import ...
- 10.JAVA之GUI编程弹出对话框Dialog
在上节基础上添加对话框显示错误信息. 代码如下: /*弹出对话框显示错误信息,对话框一般不单独出现,一般依赖于窗体.*/ /*练习-列出指定目录内容*/ import java.awt.Button; ...
- 11.JAVA之GUI编程菜单
功能:添加菜单组件 知识总结: 代码如下: import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Menu; impor ...
随机推荐
- python环境杂谈
最近发现集群里的服务器上有多个python环境,版本相同的python也有多个,主要区别是site-packages里安装的模块不同,这样配置的好处是不同类型的项目可以使用自己的python环境,不会 ...
- linux查看日志文件内容命令tail、cat、tac、head、echo、vi
linux查看日志文件内容命令tail.cat.tac.head.echo tail -f test.log你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C, ---------- ...
- github团队协作教程
跟着笔者魔鬼般的步伐,我们一起来瞅瞅一个团队协作的任务如何进行版本管理吧~ 要跟上哦~ =============================================== 首先我们先来看下 ...
- windows dos 常用命令行
有关某个命令的详细信息,请键入 HELP 命令名 dir (directory) :列出当前目录下的文件以及文件夹 md (make directory): 创建目录 rd (remove direc ...
- 信号(Django信号、Flask信号、Scrapy信号)
简介 Django.Flask.scrapy都包含了一个“信号分配器”,使得当一些动作在框架的其他地方发生的时候,解耦的应用可以得到提醒. 通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒 ...
- Notepad++插件安装和使用和打开大文件
版权声明:本文为博主皮皮http://blog.csdn.net/pipisorry原创文章,未经博主同意不得转载. https://blog.csdn.net/pipisorry/article/d ...
- 8.python中双冒号(::)的用法
s[i:j:k]是,根据该“片第从i到j与第k步”.何时i和j缺席,整个序列是和s[::k]意思是“每k个项目”. 示例 首先,让我们来初始化一个列表: >>> s = range( ...
- SWIG和PInvoke学习(1)
1. 简介 SWIG是个帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具. SWIG能应用于各种不同类型的语言包括常用脚本编译语言例如Perl, PHP, Python, ...
- 博客迁移至新平台ixirong.com
很久没有在博客园上写文章了,一是时间有些忙,更重要的是自己还是没有抽出时间来坚持写下去,由于15年后自己的一些打算,在前一段时间的时候,建立了自己的个人博客站点,http://www.ixirong. ...
- 跟我学Makefile(二)
命令出错: 每当命令运行完后, make 会检测每个命令的返回码,如果命令返回成功,那么 make 会执行下一条命令. 如果一个规则中的某个命令出错了(命令退出码非零),那么 make 就会终止执行当 ...