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上看看

时间: 2024-10-10 22:59:13

Java实现GUI计算器【代码】的相关文章

一个比较好的Java写的计算器代码 (转)

1 import java.awt.BorderLayout; 2 import java.awt.Color; 3 import java.awt.GridLayout; 4 import java.awt.event.ActionEvent; 5 import java.awt.event.ActionListener; 6 7 import javax.swing.JButton; 8 import javax.swing.JFrame; 9 import javax.swing.JPan

10.JAVA之GUI编程弹出对话框Dialog

在上节基础上添加对话框显示错误信息. 代码如下: /*弹出对话框显示错误信息,对话框一般不单独出现,一般依赖于窗体.*/ /*练习-列出指定目录内容*/ import java.awt.Button; import java.awt.Dialog; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Label; import java.awt.TextArea; import java.awt.TextField

3.JAVA之GUI编程Frame窗口

Frame 是带有标题和边框的顶层窗口. 创建图形化界面思路: 1.创建frame窗体: 2.对窗体进行基本设置: 比如大小.位置.布局 3.定义组件: 4.将组件通过add方法添加到窗体中: 5.让窗体显示,通过setVisible(ture). ****************************** 新建一个class类,名称为:studyframe 功能实现如下几点: 1.建立一个窗口: 2.窗口有标题: 3.窗口大小设置: 4.窗口位置设置: 5.窗口可见. 代码如下: impor

8.JAVA之GUI编程键盘码查询器

程序使用说明: 1.本程序由于是java代码编写,所以运行需安装jdk并配置好环境变量. 2. 复制java代码到记事本内,另存为Keyboard_events.java: 3.复制批处理代码到记事本内,另存为运行.bat. 4.双击运行.bat批处理即可执行,当前窗体必须为软件界面才能查询. 批处理代码: @echo off javac Keyboard_events.java java Keyboard_events @pause del *.class Java代码: import jav

2.JAVA之GUI编程布局

布局管理器 容器中的组件排放方式,就是布局 常见的布局管理器: **************************************************** 1.FlowLayout(流式布局管理器,构造方法可指定对齐方式.水平垂直间距) 特点:从左到右的顺序排列,默认居中. 如图所示: ****************************************************       2.Borderlayout(边界布局管理器)                 

java仿win7计算器布局

代码: package calculator; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class cal extends JFrame{ private JTextField tf =new JTextField("0"); public void addButton(String name,GridBagLayout g ,GridBagConstraints c){ JBut

java高扩展计算器

次计算器可以随意增加按钮,且不影响其它的按钮,如需增加更多的计算按钮只需要修改Answer2.java中的部分代码即可: switch(ch1) { case "=": num = Double.parseDouble(ch[i-1]); zongnum=fflag(num,zongnum,flag); flag = 0; break; case "+": num = Double.parseDouble(ch[i-1]); zongnum=fflag(num,zo

12.JAVA之GUI编程打开与保存文件

功能:java图形用户界面开发,练习打开保存文件 代码如下: import java.awt.FileDialog; import java.awt.Frame; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.TextArea; import java.awt.event.ActionEvent; import java.awt.event.ActionListen

十一:Java之GUI图形Awt和Swing

一. AWT和 Swing AWT 和 Swing 是 Java 设计 GUI用户界面的基础.与 AWT 的重量级组件不同,Swing 中大部分是轻量级组件.正是这个原因,Swing 几乎无所不能,不但有各式各样先进的组件,而且更为美观易用.所以一开始使用AWT 的程序员很快就转向使用 Swing 了. 那为什么 AWT组件没有消亡呢?因为 Swing 是架构在 AWT 之上的,没有 AWT 就没有Swing.所以程序员可以根据自己的习惯选择使用 AWT 或者是 Swing.但是,最好不要二者混