Java交互界面实现计算器开发设计【附函数源码】
使用Java开发的简易计算器,包括加、减、乘、除、平方、立方、小数等运算,适合学习GUI编程实践,
目录
- 控件触发时集中处理函数
- 操作符点击后数据转换赋值函数
- 计算器窗口界面函数
- 运算符控件
- 数字控件
- 小数点控件
- 等号控件
- 清空按钮
- 主方法调用
之前在博客上和大家分享了一篇关于使用C#开发winform计算器的文章“C#还能这么玩?[“诺基亚大屏独显计算器”来咯!”,所以最近在用Java做GUI编程的时候就想着使用Java也实现一个类似的项目。
其实在GUI交互上,Java的计算器和C#开发的计算器思想类似,都是使用函数的形式实现各模块的功能的。但同时毕竟是两种不同的开发语言,所以在具体开发上还是有所不同的。
使用Java和C#开发交互界面,最大的区别就是:
C#的交互界面的实现是可以在设计模块中直接添加控件并设置其属性,同时还会生成与控件所绑定的控件函数的,
而Java则不同,Java的窗体和控件都需要使用代码来设置的,包括控件尺寸、字体、颜色、位置坐标等都是根据特定的函数来写出来的,同时Java中的控件在最开始的时候是没有函数与其绑定的,这就需要我们根据开发需求,为控件设定相应的监听函数。
这些了解过之后,接下来就是Java计算器开发的模块化设计了。
在这里我们需要首先定义私有的全局变量来接收在计算器运行过程中的一些变量,如输入的数值、小数点、操作符、输出框内容、计算结果等,因此对于在计算器使用过程中可能出现的变量要对其进行一一接收。在这里我们使用setOutput表示文本框第一行输出的内容,使用setOutput2表示文本框第二行输出的内容。
private static String setOutput = ""; //定义文本框输出第一行private static String setOutput2 = ""; //定义文本框输出第二行private static double INumFirst = 0.0; //获取第一次输入的数值private static double INumSecond = 0.0; //获取第二次输入的数值private static double IResult = 0.0; //定义结果private static String Operation = ""; //定义操作符private static boolean OperationCliked = false; //定义布尔类型判断操作符是否单击private static boolean DotCliked = false; //定义布尔类型判断小数点是否单击private static double lastPrecisionNum = 1; //定义小数点最后一位的精度为1private static double ControlNum = 0; //获取当前控件的数值
同时在进行程序开发前,我们就应该先对项目的整个架构进行设计,考虑到程序在开发过程中需要哪些函数、实现哪些功能、需要用到怎样的方法等。
就比如拿今天开发的这个计算器来说,我们需要有最基本的主函数,控件触发时的集中处理函数(因为我们不可能对计算器上的每一个控件设置一个处理函数,这样会增大程序的复杂度)、操作符触发时的处理函数、实现计算器界面布局的函数。同时还应该对计算器的整个界面布局进行设计,这是大灰狼在这个程序中设计的计算器界面,可以参考:
在我们有了这样的总体设计之后,就是我们针对于各个函数功能的详细设计了。
.
控件触发时集中处理函数
首先是定义控件触发时的集中处理函数,该函数的功能上可以根据实际情况分为两部分,第一部分是在我们没有点击运算操作符前,点击数字控件所触发的事件,也就是我们在输入一个数值时要做的事情;第二部分是我们在点击了运算操作符之后再点击数字控件时所触发的事件,按照实际情况,这时我们输入的数值应该是要计算的第二个数值。
与此同时,每一部分也需要根据是否点击小数点而分为两种操作,如果点击了小数点,则说明将要输入的数字是小数点后的,则要做相应的处理;若没有点击小数点,则说明此时输入的为整数位,应该让相应的数值乘以10。
该函数的具体实现代码如下:
//定义控件触发时集中处理函数
public static void Numbers_Cliked() {//如果点击在运算操作符if (OperationCliked) {//如果点击了小数点if (DotCliked) {lastPrecisionNum *=0.1;double strDotnum = ControlNum*lastPrecisionNum;INumSecond += strDotnum;}else {INumSecond = INumSecond*10 + ControlNum;}setOutput2 = "";setOutput2 +=INumSecond;//return setOutput2;}//如果没有点击运算操作符else {if (DotCliked) {lastPrecisionNum *=0.1;double strDotnum = ControlNum*lastPrecisionNum;INumSecond += strDotnum;}else {INumSecond = INumSecond*10 + ControlNum;}setOutput = "";setOutput +=INumSecond;//return setOutput;}
}
.
操作符点击后数据转换赋值函数
当我们点击了运算操作符之后,说明我们的第一个数据已经输入完成了,这个时候,我们将要输入的是第二个数据,这时候我们就需要进行数据的赋值转换,因为我们最开始的时候是使用INumsecand这个变量来接收数据的,所以在点击运算操作符之后,我们需要将INumsecand的值赋给INumfirst,并将INumsecand的值赋于0,重新接收第二个数据。
你可能会问,为什么不直接使用INumfirst接收第一个数据,使用INumsecand接收第二个数据,原因是因为,当你点击数字控件时,我们无法判断你输入的数据是第一个数据还是第二个数据,我们只能将你输入的数据统一的赋值给某一个变量,在这里这个变量就是INumsecand,只有我们判断到当点击了运算操作符之后,说明我们的上一个数据已经输入完成了,这时候才需要我们将INumsecand赋值给INumfirst,来说明我们得到了第一个数据。
该函数的实现代码如下:
//定义操作符点击后数据转换赋值的函数
public static void Operation_Cliked() {INumFirst = INumSecond; //将第一次键入的值赋给第一个数INumSecond = 0; //将接收输入数值的变量赋值于0DotCliked = false; //将布尔型小数点变量赋初值为:未点击lastPrecisionNum = 1;
}
.
计算器窗口界面函数
在这两个函数完成之后,就是我们计算器的界面设计函数了,
在该函数中,我们需要对计算器的整体界面进行布局设计,同时还需要对每一个控件添加监控,当我们点击相应的控件的时候,可以触发相应的事件操作。
运算符控件
如我们点击加法按键时,需要将我们第一次输入的数据和加法运算符输出出来,并且调用操作符点击后数据转换赋值的函数,来进行数据的赋值转换。
//设置加法按键+JButton add_bt = new JButton("+");add_bt.setBounds(5, 110, 80, 40);add_bt.setFont(font);container.add(add_bt);//添加单击监控add_bt.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {// TODO Auto-generated method stubOperation = "+";setOutput += Operation + "\n";text.setText(setOutput); //数值和运算符输出OperationCliked = true;Operation_Cliked(); //调用操作符点击后数据转换赋值的函数}});
数字控件
当我们点击数字0-9时,说明我们正在进行数值的输入,这个时候就需要获取到相应控件上的数值,并且调用控件触发时集中处理函数,将我们键入的数字进行赋值。
以控件数字7为例,在这里我使用num_7.getText()来获取当前所点击控件的文本,其实这是比较笨的一种方法,需要对每一个控件使用该函数,还有一种方法是获取当前焦点所在的控件,并且获取其文本,对这种方法熟悉的小伙伴可以留言大灰狼一起交流。
下面是数字7控件的相应触发代码:
JButton num_7 = new JButton("7");
num_7.setBounds(5, 200, 80, 40);
num_7.setFont(font);
container.add(num_7);
num_7.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {// TODO Auto-generated method stubString strNum = num_7.getText();ControlNum = java.lang.Double.parseDouble(strNum);Numbers_Cliked(); //调用数值控件触发集中处理函数text.setText(setOutput + setOutput2); //文本框输出}
});
其他数字控件与其类似。
小数点控件
当我们点击小数点的时候,说明我们输入的数据存在小数位,这个时候我们就需要对其作出相应的操作,如我们在点击运算操作符之前点击的小数点控件,则将小数点显示在文本框的第一行,表示第一个数是一个小数,如果我们是在点击运算操作符之后点击的小数点控件,则需要将小数点显示在文本框的第二行,表示我们输入的第二个数是小数。
具体实现代码如下:
//设置小数点按钮JButton num_dot = new JButton(".");num_dot.setBounds(175, 335, 80, 40);num_dot.setFont(font);container.add(num_dot);num_dot.addFocusListener(new FocusListener() {@Overridepublic void focusLost(FocusEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void focusGained(FocusEvent arg0) {// TODO Auto-generated method stubif (OperationCliked) {setOutput2 += ".";text.setText(setOutput + setOutput2);DotCliked = true;}else {setOutput += ".";text.setText(setOutput + setOutput2);DotCliked = true;}}});
等号控件
当我们点击等号控件的时候,说明我们的数据和运算符的输入已经完成了,接下来我们就只需要根据我们键入的运算符进行判断,并进行相应的运算即可,同时在得到结果之后,我们还应将之前定义的所有变量赋予初值,方便我们进行下次输入。
实现代码如下:
//设置等号按钮
JButton num_equ = new JButton("=");
num_equ.setBounds(260, 110, 80, 130);
num_equ.setFont(font);
container.add(num_equ);
num_equ.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {// TODO Auto-generated method stubswitch (Operation) {case "+":IResult = INumFirst + INumSecond;break;case "-":IResult = INumFirst - INumSecond;break;case "*":IResult = INumFirst * INumSecond;break;case "/":IResult = INumFirst / INumSecond;break;case "X2":IResult = INumFirst * INumFirst;break;case "X3":IResult = INumFirst * INumFirst * INumFirst;break;default:break;}if (Operation == "X2" ){setOutput = INumFirst + "*" + INumFirst + "\n";String strIResult = java.lang.Double.toString(IResult);setOutput2 = strIResult;text.setText(setOutput + setOutput2);}if (Operation == "X3" ){setOutput = INumFirst + "*" + INumFirst + "*" + INumFirst + "\n";String strIResult = java.lang.Double.toString(IResult);setOutput2 = strIResult;text.setText(setOutput + setOutput2);}else {setOutput = INumFirst + " " + Operation + " " + INumSecond + "\n";String strIResult = java.lang.Double.toString(IResult);setOutput2 = strIResult;text.setText(setOutput + setOutput2);}//计算结束,将变量赋予初值setOutput = ""; //定义文本框输出setOutput2 = ""; INumFirst = 0; INumSecond = 0; IResult = 0.0; //定义结果Operation = ""; //定义操作符OperationCliked = false; //定义布尔类型判断操作符是否单击DotCliked = false; //定义布尔类型判断小数点是否单击lastPrecisionNum = 1; //定义小数点最后一位的精度为1ControlNum = 0; //获取当前控件的数值}
});
清空按钮
最后一个需要设置的控件就是清空按钮,当我们点击该控件时,之前输入的所有东西都将会被清空,所有的变量都将会被赋予初值。
实现代码如下:
//设置清空按钮
JButton num_empty = new JButton("CE");
num_empty.setBounds(260, 245, 80, 130);
num_empty.setFont(font);
container.add(num_empty);
num_empty.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {// TODO Auto-generated method stubsetOutput = ""; //定义文本框输出setOutput2 = "";INumFirst = 0.0; //获取第一次输入的数值INumSecond = 0.0; //获取第二次输入的数值IResult = 0.0; //定义结果Operation = ""; //定义操作符OperationCliked = false; //定义布尔类型判断操作符是否单击DotCliked = false; //定义布尔类型判断小数点是否单击lastPrecisionNum = 1; //定义小数点最后一位的精度为1ControlNum = 0; //获取当前控件的数值text.setText("0");}
});
在计算器的设计界面这些基本的控件操作完成之后,我们的计算器窗口界面函数就基本完成了。之后我们只需要在主方法中调用该函数即可实现Java计算器的运行,
.
主方法调用
主方法调用代码如下:
public static void main(String[] args) {// TODO Auto-generated method stub new Calculator_main().window("计算器"); }
实现效果:
**程序的完整源码可以在[Java简易计算器【可直接编译】]下载,
或者关注我的微信公众号“灰狼洞主”回复“Java计算器”即可获取程序完整源码!
觉得不错记得点赞关注哟!大灰狼期待与你一同进步!
Java交互界面实现计算器开发设计【附函数源码】相关推荐
- Java交互界面实现计算器开发设计【附函数源码】,java反射原理hash
在这里我们需要首先定义私有的全局变量来接收在计算器运行过程中的一些变量,如输入的数值.小数点.操作符.输出框内容.计算结果等,因此对于在计算器使用过程中可能出现的变量要对其进行一一接收.在这里我们使用 ...
- Java交互界面实现计算器开发设计【附函数源码,Java理论知识
setOutput = "";setOutput +=INumSecond;//return setOutput;} } .[](https://gitee.com/vip2048 ...
- java计算机毕业设计HTML5游戏网站设计与实现源码+mysql数据库+系统+lw文档+部署
技术栈 项目架构:B/S架构 开发语言:Java语言 开发软件:idea eclipse 前端技术:Layui.HTML.CSS.JS.JQuery等技术 后端技术:JAVA 运行环境:Win10.J ...
- 视频教程-物联网之java实现(springboot + netty + 心跳,附完整源码)-Java
物联网之java实现(springboot + netty + 心跳,附完整源码) 10年的软件行业从业经验,熟悉java开发.java 架构.微服务.自动化高级运维.压力测试等. 林忠明 ¥200. ...
- java计算机毕业设计爱心公益网站设计与制作源码+数据库+系统+lw文档+部署
java计算机毕业设计爱心公益网站设计与制作源码+数据库+系统+lw文档+部署 java计算机毕业设计爱心公益网站设计与制作源码+数据库+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开 ...
- java计算机毕业设计高校教学资源库设计与实现---源码+mysql数据库+系统+lw文档+部署
java计算机毕业设计高校教学资源库设计与实现---源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计高校教学资源库设计与实现---源码+mysql数据库+系统+lw文档+部署 本源 ...
- 计算机毕业设计Java企业员工考勤系统的设计与实现(源码+系统+mysql数据库+lw文档)
计算机毕业设计Java企业员工考勤系统的设计与实现(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java企业员工考勤系统的设计与实现(源码+系统+mysql数据库+lw文档) 本源码技术栈 ...
- java计算机毕业设计VUE教育网站设计与实现源码+mysql数据库+系统+lw文档+部署
java计算机毕业设计VUE教育网站设计与实现源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计VUE教育网站设计与实现源码+mysql数据库+系统+lw文档+部署 本源码技术栈: ...
- java毕业设计企业固定资产管理系统的设计实现mybatis+源码+调试部署+系统+数据库+lw
java毕业设计企业固定资产管理系统的设计实现mybatis+源码+调试部署+系统+数据库+lw java毕业设计企业固定资产管理系统的设计实现mybatis+源码+调试部署+系统+数据库+lw 本源 ...
最新文章
- Bzoj2110--Wc2011Xor
- HSI颜色空间及其应用
- 算法练习day8——190326(猫狗队列、转圈打印矩阵、旋转正方形矩阵、反转单向双向链表、数N的加法组合)
- 对10个元素进行快速排序,在最好情况下,元素间的比较次数为( )次。
- 化浆池是什么东西_一种双工位浆化池的制作方法
- mysql 横向扩展 中间件_mysql-proxy数据库中间件架构 | 架构师之路
- VMWare笔记-解决虚拟机能ping通主机能上网,但主机ping不通虚拟机(含思路)
- GridView批量删除页面最后N条数据时自动翻到上一页问题
- 解决IE下CSS因 Mime 类型不匹配而被忽略的问题
- Spark Structured Straming:'writeStream' can be called only on streaming Dataset/DataFrame
- 根据线性递推的DP公式如何写出变换矩阵
- [转载] Python简介、linux上Python及其IDE的安装和详细配置
- USB转RS485串口电路设计
- 掘金站内 webpack 优秀文章汇总
- 全国哀悼日网站都成黑白色实现
- 易基因综述:表观遗传学和表观育种在作物品种改良的重要作用(水稻+玉米+番茄+大豆+油菜)
- android 手机 投影,100吋1080p 看Android双核手机连投影
- 2021-08-18 关于PC与ipad的远程控制
- 实现radio单选框单击取消选中状态
- 灰色模型代码GM(1,1),从excel导入数据,亦可导出数据到excel中。