小白calculator
制作简易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相关推荐
- 从编程小白到全栈开发:基于框架开发服务端
上文中,我们了解了关于服务器端的一些概念知识,尤其是HTTP协议相关的最基本知识点,今天我想跟大家分享一下在平时正真的开发中,是如何来利用和体现这些内容的. 还记得我在<从编程小白到全栈开发:改 ...
- 笑说设计模式-小白逃课被点名
简介 工厂模式(Factory Pattern)是最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,而是 ...
- 从编程小白到全栈开发:服务的调用
忙带懒,好久没有更新文章了(其实主要是想留给你们一些消化前面文章知识点的时间,哈哈哈). 我们在前文 <从编程小白到全栈开发:基于框架开发服务端>中,初步学习了如何使用Node.js服务端 ...
- win10桌面图标有小白标_白标移动应用程序,带有react native和babel
win10桌面图标有小白标 In my previous article, I described a solution for white labelling web applications wh ...
- Python 小白的吸星大法 !
在学习 Python 过程中,尤其是小白入门阶段,会遇到很多"别人家"光鲜的标签,今天我们来看两个常见的. # 零基础 说"零基础"的案例真的比比皆是,本来 Python 编程掌握的不错,一说零基础学 ...
- python从0开始学编程课件_小白从零开始学编程(三)--python基本概念
前言 从2020年3月份开始,计划写一系列文档--<小白从零开始学编程>,记录自己从0开始学习的一些东西. 第一个系列:python,计划从安装.环境搭建.基本语法.到利用Django和F ...
- [UWP小白日记-10]程序启动屏(ios解锁既视感)
[UWP小白日记-10]程序启动屏(ios解锁既视感) 原文:[UWP小白日记-10]程序启动屏(ios解锁既视感) 讲一下 微软爸爸的开发者大会2016又暴了个表达式动画和Windows.UI.Co ...
- 【小白的CFD之旅】16 流程
那天听了小牛师兄关于CFD应用的四种境界的说法后,小白发现自己连第一种境界都算不上,自己对于CFD还只是停留在做了少数几个案例的基础上,可以说是对其一无所知.不过小白不是那种遇到挫折就退缩的人,他决定 ...
- ab753变频器参数怎么拷贝到面板_【干货】一文让你从入门小白进阶为变频器高手...
点击蓝字 关注我们 为确保 SINAMICS G120 的操作及监控便捷高效,提供了三种不同的操作面板: 1.基本操作面板(BOP-2). 2.智能操作面板(IOP-2) 3.智能连接模块(G120 ...
最新文章
- 旷视首席科学家孙剑:深度学习变革视觉计算
- vue+elementui搭建后台管理界面(登录)
- linux富文本软件,CherryTree For Linux
- Sharepoint 2010配置form认证方式(SQL账号)
- srs10流程图_高效的SRS资源指示方法与流程
- resteasy_RESTEasy教程第2部分:Spring集成
- PHP调整图片饱和度,window_Win10系统电脑屏幕的饱和度如何调整?,什么是饱和度?
对电脑来说 - phpStudy...
- 为什么R语言是学习数据分析的第一选择
- linux pthread
- 【less-24】基于SQLI的二次注入
- java app支付_java微信支付—APP
- dev c++怎么设置断点_linux操作系统引导与启动——内核启动和初始化(二)断点...
- keil软件下载安装与新建工程
- CASAIM自动化精密尺寸测量设备全尺寸检测铸件自动化检测铸件
- Github连接不上问题
- java代码审计_Java代码审计入门篇
- w7打开计算机无删除键,Win7右键菜单无用的打开方式选项怎么删除?
- CGB2202面向对象第7天
- 【文末送书】2022世界杯冠军预测,机器学习为你揭晓
- c语言 有15个数按由大到小,C++ 有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。...
热门文章
- Python报错TypeError: Descriptors cannot not be created directly
- PD快充方案:极具性价比的苹果iphone12 PD20W快充方案来了!
- 12.17-Linux系统定制
- 【中秋系列】“Python中秋二维码”来了!扫一扫,会出现……
- 简单获取速卖通aliexpress商品详情
- C# 装箱和拆箱,以及使用场景
- ASP.NET WEB API微信支付通知接口,返回xml数据,微信服务器不识别问题
- 找出3~100以内所有素数
- 英伟达的这款GPU太强了!
- (转)C# 获取汉字的拼音首字母和全拼(含源码)[A]