Java交互界面实现计算器开发设计【附函数源码】

  • 数字控件

  • 小数点控件

  • 等号控件

  • 清空按钮

  • 主方法调用

之前在博客上和大家分享了一篇关于使用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; //定义小数点最后一位的精度为1

private 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; //将接收输入数值的变量赋值于0

DotCliked = 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() {

@Override

public void actionPerformed(ActionEvent arg0) {

// TODO Auto-generated method stub

Operation = “+”;

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() {

@Override

public void actionPerformed(ActionEvent arg0) {

// TODO Auto-generated method stub

String 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() {

@Override

public void focusLost(FocusEvent arg0) {

// TODO Auto-generated method stub

}

@Override

public void focusGained(FocusEvent arg0) {

// TODO Auto-generated method stub

if (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() {

@Override

public void actionPerformed(ActionEvent arg0) {

// TODO Auto-generated method stub

switch (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;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典

  • Java核心知识整理

2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多

Java核心知识

  • Spring全家桶(实战系列)

2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多

  • 其他电子书资料

2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多

Step3:刷题

既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

以下是我私藏的面试题库:

2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
习,我分享一波个人整理的面试大全宝典**

  • Java核心知识整理

[外链图片转存中…(img-Y1429Bbs-1713129084497)]

Java核心知识

  • Spring全家桶(实战系列)

[外链图片转存中…(img-lpY7oL4t-1713129084497)]

  • 其他电子书资料

[外链图片转存中…(img-eOMJ3cpc-1713129084497)]

Step3:刷题

既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

以下是我私藏的面试题库:

[外链图片转存中…(img-kwExyAZ2-1713129084497)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值