制作简易calculator整体流程

step1

通过学习网上视频教程,利用java.jdk11和Intellij IDEA Community Edition,实现calculator的图形界面设计。

即添加计算器的 Button—>按钮 和 用于显示输入数字、输出结果的JTextField—>文本框

step2

给按钮和文本框添加鼠标监听事件。

step3

实现加减乘除、开方、平方、清零和退格功能。

小白第一天

上午:calculator图形界面设计

1、利用Container类定义一个顶级容器c

Container c = getContentPane();

2、建立一个网格管理布局器1—>2行1列

c.setLayout(new GridLayout(2, 1));

3、用类JTextField新建文本框jtf—>指定文本内容"0"并列初始化"0"

JTextField jtf = new JTextField("0", 0);

4、设置jtf水平对齐方式:居右对齐

jtf.setHorizontalAlignment(JTextField.RIGHT);
//jtf对齐方式:居左、居中、居右

5、用类JButton新建按钮并赋对应值

 JButton data0 = new JButton("0");/*data1~data9和point(点号)~ql(清零)格式均与data0一样,不再详述按钮有:data7、data8、data9、plus、sqrdata4、data5、data6、minus、rootdata1、data2、data3、mtp、qldata0、point、equ、dvd、tg*/

6、用类JPanel新建面板jp

JPanel jp = new JPanel();

7、新建网格布局管理器2(行数,列数,按钮间水平、垂直间距)

jp.setLayout(new GridLayout(4, 5, 7, 7));

8、调用add()函数,把对应按钮加到面板jp中

jp.add(data7);
/*
以下按钮格式均与data7相同,
填入对应内容即可。
按钮在面板jp中布局:
data7、data8、data9、plus、sqr(开方)
data4、data5、data6、minus、root(平方)
data1、data2、data3、mtp、ql(清零)
data0、point、equ、dvd、tg(退格)
*/

9、把文本框jtf加到顶级容器c中

 c.add(jtf);

10、把面板jp加到顶级容器c中

c.add(jp);

11、窗体大小

  setSize(400, 400);

12、窗体标题

setTitle("小白计算器");

13、窗体可视化

 setVisible(true);

14、固定窗体大小,用户不能自由改变

setResizable(false);

15、单击窗口关闭按钮时程序执行的操作

setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
下午:给按钮和文本框添加鼠标监听

通过对象调用函数addActionListener(arg0 ->{ })
实现按钮和文本框的鼠标监听

1、data0的鼠标监听

data0.addActionListener(arg0 -> {if(jtf.getText().equals("0")){//将按钮值与0作比较jtf.requestFocus();/*把输入焦点放在调用这个方法的控件上--->即把光标放在文本框jtf里*/}else{String str=jtf.getText();//取得当前按钮的按钮值jtf.setText(str+"0"); //将文本内容后加上字符0}});

2、data1的鼠标监听

data1.addActionListener(arg0 -> {if(jtf.getText().equals("0")) {//将按钮值与0作比较jtf.setText("");//将文本框初始化为空jtf.setText("1");//将文本框内容置为 1jtf.requestFocus();/*把输入焦点放在调用这个方法的控件上--->即把光标放在文本框jtf里*/ } else {String str =jtf.getText();//取得当前按钮的按钮值jtf.setText(str + "1");//将文本内容后加上字符1}});

3、data3~data9

鼠标监听格式与data1相同,填入相对应的内容即可。

4、“.”、“+”、“-”、“*”、“/”

鼠标监听格式与data1相同,填入相对应的内容即可。

5、清零

 ql.addActionListener(e -> {jtf.setText("0");//将文本框置为0--->清零功能});

小白第二天

上午:实现加减乘除

监听“等号”—>实现加减乘除

同样调用函数addActionListener(arg0 ->{ })
实现加减乘除

equ.addActionListener(arg0 -> {//处理“等号” 按键被按下事件//加法if (jtf.getText().contains("+")) {//将字符串分割为子字符串,然后将结果作为字符串数组返回String[] s = jtf.getText().split("[+]");//转义字符,要用"[+]"或者"\+"Double d1 = Double.parseDouble(s[0]);//返回一个指定字符串表示的double值Double d2 = Double.parseDouble(s[1]);double ans = d1 + d2;String answer = String.valueOf(ans);//将结果转换为字符串jtf.setText(answer);//将加法运算的结果以字符串形式在文本框中显示}//减法else if (jtf.getText().contains("-")) {String[] s = jtf.getText().split("-");jtf.setText("");Double d1 = Double.parseDouble(s[0]);Double d2 = Double.parseDouble(s[1]);double ans = d1 - d2;String answer = String.valueOf(ans);jtf.setText(answer);}//乘法运算else if (jtf.getText().contains("*")) {String[] s = jtf.getText().split("[*]");//*是转义字符,要用"[*]",或者"\*"jtf.setText("");Double d1 = Double.parseDouble(s[0]);Double d2 = Double.parseDouble(s[1]);double ans = d1 * d2;String answer = String.valueOf(ans);jtf.setText(answer);}//除法运算else if (jtf.getText().contains("/")) {String[] s = jtf.getText().split("/");jtf.setText("");Double d1 = Double.parseDouble(s[0]);Double d2 = Double.parseDouble(s[1]);double ans = d1 / d2;String answer = String.valueOf(ans);jtf.setText(answer);} else {jtf.setText("请选择要进行的运算");}});
下午:实现平方、开方

平方—>监听sqrt键

 root.addActionListener(e -> {//root键被按事件String i = jtf.getText();Double j = Double.parseDouble(i);/*将字符串i转换成对应的double类型的数值*/double ans = j * j;  //求平方String answer = String.valueOf(ans);//将int型数据转换成String类型jtf.setText(answer);//将文本框设置为平方后的结果});

开方—>监听sqrt键

 sqr.addActionListener(e -> {//sqrt键被按事件String i = jtf.getText();double j = Double.parseDouble(i);/*将字符串转换成对应的double类型的数值*/double ans = Math.sqrt(j);//求开方String answer = String.valueOf(ans);//将double型数据转换成String类型jtf.setText(answer);//将文本框设置为开方后的结果});

小白第三天

上午:实现指数、对数、正弦、余弦、正切

指数—>监听exp键

exp.addActionListener(e -> {//sqrt键被按事件String i = jtf.getText();double j = Double.parseDouble(i);/*将字符串转换成对应的double类型的数值*/double ans = Math.exp(j);//求开方String answer = String.valueOf(ans);/*将double型数据转换成String类型*/jtf.setText(answer);//将文本框设置为开方后的结果});

对数—>监听log键

log.addActionListener(e -> {//log键被按事件String i = jtf.getText();double j = Double.parseDouble(i);/*将字符串转换成对应的double 类型的数值*/double ans = Math.log(j);//求对数String answer = String.valueOf(ans);/*将double型数据转换成String类型*/jtf.setText(answer);//将文本框设置求对数后的结果});

正弦—>监听sin键

sin.addActionListener(e -> {//sin键被按事件String i = jtf.getText();double j = Double.parseDouble(i);/*将字符串转换成对应的double类型的数值*/double ans = Math.sin(j);//求正弦String answer = String.valueOf(ans);/*将double型数据转换成String类型*/jtf.setText(answer);/*将文本框设置为求正弦后的结果*/});

余弦—>监听cos键

 cos.addActionListener(e -> {//cos键被按事件String i = jtf.getText();double j = Double.parseDouble(i);/*将字符串转换成对应的double类型的数值*/double ans = Math.cos(j);//求余弦String answer = String.valueOf(ans);/*将double型数据转换成String类型*/jtf.setText(answer);/*将文本框设置为求余弦后的结果*/});

正切—>监听tan键

tan.addActionListener(e -> {//tan键被按事件String i = jtf.getText();double j = Double.parseDouble(i);/*将字符串转换成对应的double类型的数值*/double ans = Math.tan(j);//求正切String answer = String.valueOf(ans);/*将double型数据转换成String类型*/jtf.setText(answer);/*将文本框设置为求正切后的结果*/});
下午:实现清零、退格

清零—>监听清零键

ql.addActionListener(e -> {jtf.setText("0");//将文本框置为0--->清零功能});

退格—>监听退格键

tg.addActionListener(arg0 -> {//处理退格键被按下的事件String text = jtf.getText();int i = text.length();if (i > 0) {text = text.substring(0, i - 1);//去掉最后一个字符if (text.length() == 0) {/*如果文本没有了内容,则初始化计算器的各种值*/jtf.setText("0");} else {// 显示新的文本jtf.setText(text);}}});

calculator具体代码:

package First_App;import javax.swing.*;
import java.awt.*;public class Calculators extends JFrame {// 图形界面设计public Calculators() {Container c = getContentPane(); //定义一个顶级容器cc.setLayout(new GridLayout(2, 1));//新建网格布局管理器1,2行1列JTextField jtf = new JTextField("0", 0);//用类JTextField新建文本框jtf--->指定文本内容"0"并列初始化"0"jtf.setHorizontalAlignment(JTextField.RIGHT);//设置jtf水平对齐方式:居右对齐JButton data0 = new JButton("0");//用类JButton新建按钮并赋对应值JButton data1 = new JButton("1");JButton data2 = new JButton("2");JButton data3 = new JButton("3");JButton data4 = new JButton("4");JButton data5 = new JButton("5");JButton data6 = new JButton("6");JButton data7 = new JButton("7");JButton data8 = new JButton("8");JButton data9 = new JButton("9");JButton point = new JButton(".");JButton equ = new JButton("=");JButton plus = new JButton("+");JButton minus = new JButton("-");JButton mtp = new JButton("*");JButton dvd = new JButton("/");JButton sqr = new JButton("sqrt");JButton root = new JButton("x^2");JButton tg = new JButton("退格");JButton ql = new JButton("清零");JButton exp = new JButton("e^");JButton log = new JButton("log");JButton sin = new JButton("sin");JButton cos = new JButton("cos");JButton tan = new JButton("tan");JPanel jp = new JPanel();   //用类JPanel新建面板jpjp.setLayout(new GridLayout(5, 5, 7, 7));//新建网格布局管理器2(行数,列数,按钮间水平、垂直间距)jp.add(data7);//调用add()函数,把对应按钮加到面板jp中jp.add(data8);jp.add(data9);jp.add(plus);jp.add(sqr);jp.add(data4);jp.add(data5);jp.add(data6);jp.add(minus);jp.add(root);jp.add(data1);jp.add(data2);jp.add(data3);jp.add(mtp);jp.add(ql);jp.add(data0);jp.add(point);jp.add(equ);jp.add(dvd);jp.add(tg);jp.add(exp);jp.add(log);jp.add(sin);jp.add(cos);jp.add(tan);c.add(jtf);//把文本框jtf加到顶级容器c中c.add(jp);//把面板jp加到顶级容器c中setSize(400, 400);//窗体大小setTitle("小白计算器");//窗体标题setVisible(true);//窗体可视化setResizable(false);//固定窗体大小,用户不能自由改变setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//单击窗口关闭按钮时程序执行的操作//实现相关功能--->数字输入、相应计算data0.addActionListener(arg0 -> {if (jtf.getText().equals("0")) {//将按钮值与0作比较jtf.requestFocus();//把输入焦点放在调用这个方法的控件上--->即把光标放在文本框jtf里} else {String str = jtf.getText();//取得当前按钮的按钮值jtf.setText(str + "0");   //将文本内容后加上字符0}});//数字输入data1.addActionListener(arg0 -> {if (jtf.getText().equals("0")) {//将按钮值与0作比较jtf.setText("");//将文本框初始化为空jtf.setText("1");//将文本框内容置为 1jtf.requestFocus();//把输入焦点放在调用这个方法的控件上--->即把光标放在文本框jtf里} else {String str = jtf.getText();//取得当前按钮的按钮值jtf.setText(str + "1");   //将文本内容后加上字符1}});data2.addActionListener(arg0 -> {if (jtf.getText().equals("0")) {jtf.setText("");jtf.setText("2");jtf.requestFocus();} else {String str = jtf.getText();jtf.setText(str + "2");}});data3.addActionListener(arg0 -> {if (jtf.getText().equals("0")) {jtf.setText("");jtf.setText("3");jtf.requestFocus();} else {String str = jtf.getText();jtf.setText(str + "3");}});data4.addActionListener(arg0 -> {if (jtf.getText().equals("0")) {jtf.setText("");jtf.setText("4");jtf.requestFocus();} else {String str = jtf.getText();jtf.setText(str + "4");}});data5.addActionListener(arg0 -> {if (jtf.getText().equals("0")) {jtf.setText("");jtf.setText("5");jtf.requestFocus();} else {String str = jtf.getText();jtf.setText(str + "5");}});data6.addActionListener(arg0 -> {if (jtf.getText().equals("0")) {jtf.setText("");jtf.setText("6");jtf.requestFocus();} else {String str = jtf.getText();jtf.setText(str + "6");}});data7.addActionListener(arg0 -> {if (jtf.getText().equals("0")) {jtf.setText("");jtf.setText("7");jtf.requestFocus();} else {String str = jtf.getText();jtf.setText(str + "7");}});data8.addActionListener(arg0 -> {if (jtf.getText().equals("0")) {jtf.setText("");jtf.setText("8");jtf.requestFocus();} else {String str = jtf.getText();jtf.setText(str + "8");}});data9.addActionListener(arg0 -> {if (jtf.getText().equals("0")) {jtf.setText("");jtf.setText("9");jtf.requestFocus();} else {String str = jtf.getText();jtf.setText(str + "9");}});//点号的输入point.addActionListener(arg0 -> {if (jtf.getText().equals("0")) {jtf.setText("");jtf.setText(".");jtf.requestFocus();} else {String str = jtf.getText();jtf.setText(str + ".");}});//+号的输入plus.addActionListener(arg0 -> {if (jtf.getText().equals("0")) {jtf.setText("");jtf.setText("+");jtf.requestFocus();} else {String str = jtf.getText();jtf.setText(str + "+");}});//-号的输入minus.addActionListener(arg0 -> {if (jtf.getText().equals("0")) {jtf.setText("");jtf.setText("-");jtf.requestFocus();} else {String str = jtf.getText();jtf.setText(str + "-");}});//*号的输入mtp.addActionListener(arg0 -> {if (jtf.getText().equals("0")) {jtf.setText("");jtf.setText("*");jtf.requestFocus();} else {String str = jtf.getText();jtf.setText(str + "*");}});//除号的输入dvd.addActionListener(arg0 -> {if (jtf.getText().equals("0")) {jtf.setText("");jtf.setText("/");jtf.requestFocus();} else {String str = jtf.getText();jtf.setText(str + "/");}});//退格--->监听退格键tg.addActionListener(arg0 -> {//处理退格键被按下的事件String text = jtf.getText();int i = text.length();if (i > 0) {text = text.substring(0, i - 1);//去掉最后一个字符if (text.length() == 0) {// 如果文本没有了内容,则初始化计算器的各种值jtf.setText("0");} else { // 显示新的文本jtf.setText(text);}}});//清零--->监听清零键ql.addActionListener(e -> {jtf.setText("0");//将文本框置为0--->清零功能});//平方--->监听root键root.addActionListener(e -> {//root键被按事件String i = jtf.getText();Double j = Double.parseDouble(i);//将字符串i转换成对应的double类型的数值double ans = j * j;  //求平方String answer = String.valueOf(ans);//将int型数据转换成String类型jtf.setText(answer);//将文本框设置为平方后的结果});//开方--->监听sqrt键sqr.addActionListener(e -> {//sqrt键被按事件String i = jtf.getText();double j = Double.parseDouble(i);//将字符串转换成对应的double类型的数值double ans = Math.sqrt(j);//求开方String answer = String.valueOf(ans);//将double型数据转换成String类型jtf.setText(answer);//将文本框设置为开方后的结果});//指数--->监听exp键exp.addActionListener(e -> {//exp键被按事件String i = jtf.getText();double j = Double.parseDouble(i);//将字符串转换成对应的double类型的数值double ans = Math.exp(j);//求指数String answer = String.valueOf(ans);//将double型数据转换成String类型jtf.setText(answer);//将文本框设置为求指数后的结果});//对数--->监听log键log.addActionListener(e -> {//log键被按事件String i = jtf.getText();double j = Double.parseDouble(i);//将字符串转换成对应的double类型的数值double ans = Math.log(j);//求对数String answer = String.valueOf(ans);//将double型数据转换成String类型jtf.setText(answer);//将文本框设置求对数后的结果});//正弦--->监听sin键sin.addActionListener(e -> {//sin键被按事件String i = jtf.getText();double j = Double.parseDouble(i);//将字符串转换成对应的double类型的数值double ans = Math.sin(j);//求正弦String answer = String.valueOf(ans);//将double型数据转换成String类型jtf.setText(answer);//将文本框设置为求正弦后的结果});//余弦--->监听cos键cos.addActionListener(e -> {//cos键被按事件String i = jtf.getText();double j = Double.parseDouble(i);//将字符串转换成对应的double类型的数值double ans = Math.cos(j);//求余弦String answer = String.valueOf(ans);//将double型数据转换成String类型jtf.setText(answer);//将文本框设置为求余弦后的结果});//正切--->监听tan键tan.addActionListener(e -> {//tan键被按事件String i = jtf.getText();double j = Double.parseDouble(i);//将字符串转换成对应的double类型的数值double ans = Math.tan(j);//求正切String answer = String.valueOf(ans);//将double型数据转换成String类型jtf.setText(answer);//将文本框设置为求正切后的结果});//等号--->实现--加减乘除 即监听 “等号” 键equ.addActionListener(arg0 -> {//处理“等号” 按键被按下事件//加法if (jtf.getText().contains("+")) {//将字符串分割为子字符串,然后将结果作为字符串数组返回String[] s = jtf.getText().split("[+]");//转义字符,要用"[+]"或者"\+"Double d1 = Double.parseDouble(s[0]);//返回一个指定字符串表示的double值Double d2 = Double.parseDouble(s[1]);double ans = d1 + d2;String answer = String.valueOf(ans);//将结果转换为字符串jtf.setText(answer);//将加法运算的结果以字符串形式在文本框中显示}//减法else if (jtf.getText().contains("-")) {String[] s = jtf.getText().split("-");jtf.setText("");Double d1 = Double.parseDouble(s[0]);Double d2 = Double.parseDouble(s[1]);double ans = d1 - d2;String answer = String.valueOf(ans);jtf.setText(answer);}//乘法运算else if (jtf.getText().contains("*")) {String[] s = jtf.getText().split("[*]");//*是转义字符,要用"[*]",或者"\*"jtf.setText("");Double d1 = Double.parseDouble(s[0]);Double d2 = Double.parseDouble(s[1]);double ans = d1 * d2;String answer = String.valueOf(ans);jtf.setText(answer);}//除法运算else if (jtf.getText().contains("/")) {String[] s = jtf.getText().split("/");jtf.setText("");Double d1 = Double.parseDouble(s[0]);Double d2 = Double.parseDouble(s[1]);double ans = d1 / d2;String answer = String.valueOf(ans);jtf.setText(answer);} else {jtf.setText("请选择要进行的运算");}});}public static void main(String[] args) {new Calculators();}
}

小白calculator相关推荐

  1. 从编程小白到全栈开发:基于框架开发服务端

    上文中,我们了解了关于服务器端的一些概念知识,尤其是HTTP协议相关的最基本知识点,今天我想跟大家分享一下在平时正真的开发中,是如何来利用和体现这些内容的. 还记得我在<从编程小白到全栈开发:改 ...

  2. 笑说设计模式-小白逃课被点名

    简介 工厂模式(Factory Pattern)是最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,而是 ...

  3. 从编程小白到全栈开发:服务的调用

    忙带懒,好久没有更新文章了(其实主要是想留给你们一些消化前面文章知识点的时间,哈哈哈). 我们在前文 <从编程小白到全栈开发:基于框架开发服务端>中,初步学习了如何使用Node.js服务端 ...

  4. win10桌面图标有小白标_白标移动应用程序,带有react native和babel

    win10桌面图标有小白标 In my previous article, I described a solution for white labelling web applications wh ...

  5. Python 小白的吸星大法 !

    在学习 Python 过程中,尤其是小白入门阶段,会遇到很多"别人家"光鲜的标签,今天我们来看两个常见的. # 零基础 说"零基础"的案例真的比比皆是,本来 Python 编程掌握的不错,一说零基础学 ...

  6. python从0开始学编程课件_小白从零开始学编程(三)--python基本概念

    前言 从2020年3月份开始,计划写一系列文档--<小白从零开始学编程>,记录自己从0开始学习的一些东西. 第一个系列:python,计划从安装.环境搭建.基本语法.到利用Django和F ...

  7. [UWP小白日记-10]程序启动屏(ios解锁既视感)

    [UWP小白日记-10]程序启动屏(ios解锁既视感) 原文:[UWP小白日记-10]程序启动屏(ios解锁既视感) 讲一下 微软爸爸的开发者大会2016又暴了个表达式动画和Windows.UI.Co ...

  8. 【小白的CFD之旅】16 流程

    那天听了小牛师兄关于CFD应用的四种境界的说法后,小白发现自己连第一种境界都算不上,自己对于CFD还只是停留在做了少数几个案例的基础上,可以说是对其一无所知.不过小白不是那种遇到挫折就退缩的人,他决定 ...

  9. ab753变频器参数怎么拷贝到面板_【干货】一文让你从入门小白进阶为变频器高手...

    点击蓝字 关注我们 为确保 SINAMICS G120 的操作及监控便捷高效,提供了三种不同的操作面板: 1.基本操作面板(BOP-2). 2.智能操作面板(IOP-2) 3.智能连接模块(G120 ...

最新文章

  1. 旷视首席科学家孙剑:深度学习变革视觉计算
  2. vue+elementui搭建后台管理界面(登录)
  3. linux富文本软件,CherryTree For Linux
  4. Sharepoint 2010配置form认证方式(SQL账号)
  5. srs10流程图_高效的SRS资源指示方法与流程
  6. resteasy_RESTEasy教程第2部分:Spring集成
  7. PHP调整图片饱和度,window_Win10系统电脑屏幕的饱和度如何调整?,什么是饱和度? 对电脑来说 - phpStudy...
  8. 为什么R语言是学习数据分析的第一选择
  9. linux pthread
  10. 【less-24】基于SQLI的二次注入
  11. java app支付_java微信支付—APP
  12. dev c++怎么设置断点_linux操作系统引导与启动——内核启动和初始化(二)断点...
  13. keil软件下载安装与新建工程
  14. CASAIM自动化精密尺寸测量设备全尺寸检测铸件自动化检测铸件
  15. Github连接不上问题
  16. java代码审计_Java代码审计入门篇
  17. w7打开计算机无删除键,Win7右键菜单无用的打开方式选项怎么删除?
  18. CGB2202面向对象第7天
  19. 【文末送书】2022世界杯冠军预测,机器学习为你揭晓
  20. c语言 有15个数按由大到小,C++ 有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。...

热门文章

  1. Python报错TypeError: Descriptors cannot not be created directly
  2. PD快充方案:极具性价比的苹果iphone12 PD20W快充方案来了!
  3. 12.17-Linux系统定制
  4. 【中秋系列】“Python中秋二维码”来了!扫一扫,会出现……
  5. 简单获取速卖通aliexpress商品详情
  6. C# 装箱和拆箱,以及使用场景
  7. ASP.NET WEB API微信支付通知接口,返回xml数据,微信服务器不识别问题
  8. 找出3~100以内所有素数
  9. 英伟达的这款GPU太强了!
  10. (转)C# 获取汉字的拼音首字母和全拼(含源码)[A]