java计算器拓展

news2024/11/26 4:41:35

源代码:

package shixun;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.SwingConstants;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Font;
import java.awt.Color;
public class Calculator extends JFrame implements ActionListener {
	    // 第一行:计算式
		private JTextField expText = new JTextField();//单行文本框
		// 第二行:计算结果,设初始值为0
		private JTextField resultText = new JTextField("0");
		private String num1="",num2="";//两个操作数:数1、数2
		private String fh=""; //运算符
		private double r; //计算结果
		// 构造方法
		public Calculator() {
			// 调用父类JFrame的构造函数,设置标题
			super("计算器");
			//设置各个按钮上的文字
			String[] keysValue= {"7","8","9","÷","4","5","6","×","1","2","3",
					"-","0","CE","+","^","sin","cos","tan","=","sqrt","ln"};
			//设置各个按钮上的动作命令标识
			String[] actionCmd= {"7","8","9","÷","4","5","6","*","1","2","3",
					"-","0","CE","+","^","sin","cos","tan","=","sqrt","ln"};
			//创建一个按钮数组
			JButton keys[]=new JButton[keysValue.length];
			Font font=new Font("宋体",Font.PLAIN,18);
			//设置计算式文本框的位置为(10,10),宽为:280,高为:40
			expText.setBounds(10, 10, 280, 40);
			expText.setFont(font);
			expText.setBackground(Color.white);
			expText.setEditable(false);// 计算式不能修改
			//设置计算结果文本框的大小
			resultText.setBounds(10, 50, 280, 40);
			resultText.setFont(font);
			resultText.setBackground(Color.white);
			resultText.setEditable(false);// 计算结果不能修改
			//设置计算结果文本框的对齐方式:右对齐
			resultText.setHorizontalAlignment(SwingConstants.RIGHT);
			// 设置窗口布局
			this.setLayout(null);//设置为null即为清空布局管理器
			this.add(expText);  // 将计算式文本框添加到窗口中
			this.add(resultText);// 将计算结果文本框添加到窗口中
			// 放置按钮
			int x=10,y=100;   
			for (int i=0;i<keysValue.length;i++) {
				keys[i]=new JButton();
				keys[i].setText(keysValue[i]);
				keys[i].setActionCommand(actionCmd[i]);
				keys[i].setBounds(x,y,70,45);//按钮的宽为70,高为45
				keys[i].setFont(font);
				if(x<=150) {
					x+=70;
				} else {
					x=10;
					y+=50;
				}
				this.add(keys[i]);//将每个按钮添加到窗口中
			}
			// 给每个按钮添加监听
			for (int i=0;i<keysValue.length;i++) {
				keys[i].addActionListener(this);
			}
			// 设置窗口大小
			this.setSize(310, 440);
			// 窗口大小不能修改
			this.setResizable(false);
			//设置窗口的相对位置,位于屏幕中央
			this.setLocationRelativeTo(null);
			//设置窗口的关闭操作:直接关闭
			this.setDefaultCloseOperation(EXIT_ON_CLOSE);
			this.setVisible(true); // 设置窗口可见
		}
		//计算功能
		public void result(String z) {
	        if(z.equals("+"))
	            r=Double.parseDouble(num1)+Double.parseDouble(num2);
	        if(z.equals("-"))
	            r=Double.parseDouble(num1)-Double.parseDouble(num2);
	        if(z.equals("*"))
	            r=Double.parseDouble(num1)*Double.parseDouble(num2);
	        if(z.equals("÷"))
	            r=Double.parseDouble(num1)/Double.parseDouble(num2);
	        if(z.equals("sin"))
	        	r=Math.sin(Double.parseDouble(num1));
	        if(z.equals("cos"))
	        	r=Math.cos(Double.parseDouble(num1));
	        if(z.equals("tan"))
	        	r=Math.tan(Double.parseDouble(num1));
	        if(z.equals("^"))
	        	r=Math.pow(Double.parseDouble(num1),Double.parseDouble(num2));
	        if(z.equals("ln"))
	        	r=Math.log(Double.parseDouble(num1));
	        if(z.equals("sqrt"))
	        	r=Math.sqrt(Double.parseDouble(num1));
	        num1=Double.toString(r);
	        //将结果显示在文本框resultText中
	        resultText.setText(num1);
	        //算完后将  数2  和  运算符  清空
	        num2="";
	        fh="";
	    }
	    //重写接口ActionListener里的抽象方法
	    public void actionPerformed(ActionEvent e){
	        //e.getActionCommand()得到的是组件对象上的字符串
	    	String cmd=e.getActionCommand();
	        if(cmd.equals("0")||cmd.equals("1")||cmd.equals("2")||cmd.equals("3")
	        	||cmd.equals("4")||cmd.equals("5")||cmd.equals("6")
	        	||cmd.equals("7")||cmd.equals("8")||cmd.equals("9")) {
	            if(fh.equals("")) {
	            	num1+=cmd;
	                expText.setText(num1);
	            }
	            else { 
	            	num2+=cmd;
	                expText.setText(num1+fh+num2);
	            }
	        }
	        //运算
	        if(cmd.equals("+")) {
	            if(fh!="")
	                result(fh);//调用result函数计算结果,并将结果显示在文本框resultText中
	            fh="+";
	            //在计算式文本框中显示第一个数和符号
	            expText.setText(num1+fh);
	        }
	        if(cmd.equals("-")) {
	            if(fh!="")
	                result(fh);
	            fh="-";
	            expText.setText(num1+fh);
	        }
	        if(cmd.equals("*")) {
	            if(fh!="")
	                result(fh);
	            fh="*";
	            expText.setText(num1+fh);
	        }
	        if(cmd.equals("÷")) {
	            if(fh!="")
	                result(fh);
	            fh="÷";
	            expText.setText(num1+fh);
	        }
	        if(cmd.equals("^")) {
	            if(fh!="")
	                result(fh);
	            fh="^";
	            expText.setText(num1+fh);
	        }
	        if(cmd.equals("sin")) {
	            if(fh!="")
	                result(fh);
	            fh="sin";
	            expText.setText(fh+num1);
	        }
	        if(cmd.equals("cos")) {
	            if(fh!="")
	                result(fh);
	            fh="cos";
	            expText.setText(fh+num1);
	        }
	        if(cmd.equals("tan")) {
	            if(fh!="")
	                result(fh);
	            fh="tan";
	            expText.setText(fh+num1);
	        }
	        if(cmd.equals("sqrt")) {
	            if(fh!="")
	                result(fh);
	        	fh="sqrt";
	        	expText.setText("√"+num1);
	        }
	        if(cmd.equals("ln")) {
	            if(fh!="")
	                result(fh);
	            fh="ln";
	        	expText.setText(fh+num1);
	        }
	        if(cmd.equals("=")) {
	            result(fh);
	        }
	     // "CE"键清空数据
	        if(cmd.equals("CE")) {
	        	num1="";
	        	num2="";
	            fh="";
	            expText.setText("");
	            resultText.setText("0");
	        }
	    }
	    public static void main(String[] args) {
			// TODO Auto-generated method stub
			new Calculator();
		}
	}

运行结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/701322.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Golang项目引入第三方依赖库

基本目录 第一步&#xff1a; 初始化依赖&#xff0c;切换到项目根目录下面&#xff0c;执行一下命令&#xff0c;g6 为 module 的名称 go mod init g6 生成 go.mod 文件 module g6 go 1.20 将来我们项目的所有依赖都会依赖于 g6 第二步&#xff1a; 引入第三方依赖 &qu…

禁烟警示器报警器

本例介绍的禁止吸烟警示器&#xff0c;可用于家庭居室或各种不宜吸烟的场合 (例如医院、会议室等)。当有人吸烟时&#xff0c;该禁止吸烟警示器会发出"请不要吸烟!"的语言警示声&#xff0c;提醒吸烟者自觉停止吸烟。 一、电路工作原理 电路原理如图 5 所示。 该…

3-如何创建等比数列?【视频版】

目录 问题视频解答 问题 视频解答 点击观看&#xff1a; 3-如何创建等差数列&#xff1f;

一文带你了解WebSocket与技术原理

文章目录 一、技术发展史二、什么是WebSocket三、WebSocket与Socket四、WebSocket 机制五、WebSocket API简单实现 一、技术发展史 在了解WebSocket之前&#xff0c;我们先了解这项技术的发展史&#xff0c;它可以追溯到2008年&#xff0c;当时HTML5规范中引入了该协议作为一种…

【Java】Java核心 80:Git 教程(3)初始化工作区 add与commit

文章目录 04.GIT本地操作-初始化工作区目标内容小结 05.GIT本地操作-add与commit目标内容小结 在Git中&#xff0c;初始化工作区并使用add和commit命令是进行版本控制的基本操作。 下面是对这些操作的简要解释&#xff1a; 初始化工作区&#xff1a;在使用Git之前&#xff0c…

【语音播报】没时间刷新闻热搜?让博灵语音通知终端读给你听!-声光报警灯|语音播报器|Modbus报警灯|网口语音播报|网络语音播报器

背景 每天上班太忙碌&#xff0c;没有时间刷微博&#xff0c;新闻发展的太快&#xff0c;生怕错过微博热搜&#xff0c;看着手边的博灵语音通知终端&#xff0c;决定自己写一个脚本&#xff0c;让它给我读新闻&#xff01; 少废话&#xff0c;先看东西 实现了以下效果 每90…

02 快速定位关键点并爆破

vm所进行的代码级的保护是对于软件保护的最后一层 1、API断点法 如何切换到程序的代码节的位置&#xff1f; 》od点击e->双击xxx.exe即可 程序需要读取文本框输入的内容&#xff0c;所以肯定会调用GetWindowText函数&#xff0c;所以可以ctrlg然后输入GetWindowText进行…

ChatGPT 和 Elasticsearch:分面、过滤和更多上下文

作者&#xff1a;Luca Wintergerst 在最近的一篇博客文章中&#xff0c;我们讨论了 ChatGPT 和 Elasticsearch 如何协同工作以帮助更有效地管理专有数据。 通过利用 Elasticsearch 的搜索功能和 ChatGPT 的上下文理解&#xff0c;我们演示了如何改进结果。 在这篇文章中&#…

制造业数字化转型难?低代码带来曙光

概要&#xff1a;制造业企业在数字化转型中一直面临着许多困难和挑战&#xff0c;中小企业更是如此。天翎低代码平台通过自身可视化设计、私有化部署、灵活性、扩展性和兼容性等特性&#xff0c;帮助制造业企业更好地完成数字化转型目标。不仅如此&#xff0c;天翎还推出了微鳄…

iview tree树形控件多选,自定义内容

项目中需要一个iview框架的树形控件,需要里面包含以下功能 1、控件宽度可展开,可缩小2、树形控件可搜索,并且定位到搜索的节点3、控件可以一键勾选,一键取消4、控件图标自定义5、 点击最后一个节点时可以进入到二级节点,点击上一节点可返回完整代码:listToTree文件 效果图: 具…

标准模版库 知识点总结 C++程序设计与算法笔记总结(八) 北京大学 郭炜

标准模版库 https://blog.csdn.net/shaozheng0503/article/details/129101932?ops_request_misc%257B%2522request%255Fid%2522%253A%2522168802585416800211563089%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id1688025854168…

前端判断img图片未能正确加载时显示一个默认图片。img标签onerror事件设置了本地默认图片还是不显示的问题

前端img标签中引用后端交给的图片地址时&#xff0c;有可能这个路径下图片被删除或者损坏了&#xff0c;那么页面在加载img图片时就显示为&#xff0c;太丑了。 img标签有个onerror事件&#xff0c;就是当图片未被正确加载的时候调用此事件&#xff0c;写的时候在onerror事件里…

安装国产系统Kylin-Desktop实战

前言 随着国产化系统的呼声越来越高&#xff0c;再加上今年6月红帽公司发表声明&#xff0c;只有付费才能拿到代码的通告&#xff0c;学习国产化势在必行。 在众多的国产化系统中&#xff0c;我选择了排名比较高的系统&#xff0c;今天我们就一起来安装下麒麟的操作系统 &…

习题-集合框架

目录 1.打印信息 2.ArrayList的使用 User类 测试类 3.Set的使用 汽车类 测试类 4.ArrayList使用 5.新闻 新闻类 测试类 6.返回索引 7.删除重复QQ 8.Map集合操作 9.成绩排序 学生类 测试类 10.Map基础题 学员类 测试类 11.遍历Map综合-国家名称 12.Collec…

1. Linux手写简单的线程池

目录 一、线程池的概念二、线程池的核心组件三、数据结构设计1、任务队列2、线程池 四、接口设计1、创建线程池2、销毁线程池3、抛出任务的接口 五、实现一个线程池及测试1、测试单生成者——多消费者2、测试多生产者——多消费者3、thrd_pool.h4、thrd_pool.c5、main.c6、thrd…

<C语言> 操作符

1.算术操作符 加法&#xff08;&#xff09;&#xff1a;用于将两个操作数相加。减法&#xff08;-&#xff09;&#xff1a;用于将第一个操作数减去第二个操作数。乘法&#xff08;*&#xff09;&#xff1a;用于将两个操作数相乘。除法&#xff08;/&#xff09;&#xff1a;…

使用JavaScript获取随机数序列

使用Javascript 生成随机数 要在 Javascript 中生成随机数&#xff0c;可以使用 Math 对象的 random() 方法。该方法返回一个大于等于 0 小于 1 的伪随机浮点数。 Javascript中的 Math.random() 函数是一个用于生成随机数的内置函数。 MDN 官方解释 Math.random() 函数返回…

idea常用快捷方式,保姆级!图文并茂【建议收藏】

大家好&#xff0c;我是三叔&#xff0c;很高兴这期又和大家见面了&#xff0c;一个奋斗在互联网的打工人。 给大家分享一下idea在开发过程中使用的快捷方式把&#xff0c;可以极大的提升生产力&#xff0c;提高自己的开发速度&#xff0c;需要在开发中不断地使用&#xff0c;…

《Linux操作系统编程》 第十章 线程与线程控制: 线程的创建、终止和取消,detach以及线程属性

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

arcgis-elasticsearch矢量数据导入及索引设计工具

插件说明 插件支持单图层导入和多图层同时导入&#xff0c;依赖elasticsearch包和urlLib包&#xff0c;使用之前请用pip安装&#xff0c;具体的依赖包的requirements.txt文件放在压缩包里面了。 pip install -r requirements.txt插件下载地址&#xff1a;https://download.cs…