java实训-简易计算器

程序思路

1.界面设计

首先创建Frame容器,textField文本框,Jpanel面板,

文本框放置在Fram的BorderLayout.North

面板放置在Frame的BorderLayout.Center

创建了成员变量bton

长度为25的bton数组和btonlabel数组

通过for循环创建25个bton对象并设置了相应的label

利用Font设置了bton中label中字体的大小和字体

2.计算功能实现

通过给bton添加监听实现功能

创建了strA,strB和operate

通过一个action变量获得按钮的ActionCommand,

将ActionCommand转化为char类型赋值给act

str+=action利用字符串实现了数字追加

用if判断输入为数字还是运算符,初始化operate为~,通过判断operate是否为~判断用户输入的是第几个数。

当用户按下等号时再用if判断operate为何种运算符进入不同的运算。

在运算中通过继承了Arithmetic类,Arithmetic类接了两个接口,一个实现基础的四则运算,一个实现多功能计算,通过调用方法进行计算,并输出

3. 颜色设置功能

在Frame中添加了menuBar菜单栏,添加了颜色菜单项。

给颜色菜单项添加监听,当被点击时弹出窗口,在窗口里添加了各种颜色的复选框,为了使复选框只能选中一个,将复选框都添加在buttonGroup中。

为各个复选框添加监听,当复选框被选中时设置不同的按钮背景颜色

代码实现

package YMP.practical_Training.Test1_3;
​
public interface base_Operation {double add(int a,int b);double sub(int a,int b);double mul(int a,int b);double div(int a,int b);
​double add(double a,double b);double sub(double a,double b);double mul(double a,double b);double div(double a,double b);
}
​

package YMP.practical_Training.Test1_3;
​
public interface moreArithmetic {double sin(int a);double cos(int a);double tan(int a);
​double sin(double a);double cos(double a);double tan(double a);
​double percent(int a);double percent(double a);
​double pow(int a,int b);double pow(double a,double b);
​double sqrt(int a);double sqrt(double a);
​double f(int a);
​double minusPower(double a);
​
}
​

package YMP.practical_Training.Test1_3;
​
public class Arithmetic implements moreArithmetic, base_Operation {@Overridepublic double sin(int a) {return Math.sin(a);}
​@Overridepublic double cos(int a) {return Math.cos(a);}
​@Overridepublic double tan(int a) {return Math.tan(a);}
​@Overridepublic double sin(double a) {return Math.sin(a);}
​@Overridepublic double cos(double a) {return Math.cos(a);}
​@Overridepublic double tan(double a) {return Math.tan(a);}
​@Overridepublic double percent(int a) {return (double)a/100;}
​@Overridepublic double percent(double a) {return a/100;}
​@Overridepublic double pow(int a, int b) {return Math.pow(a,b);}
​@Overridepublic double pow(double a, double b) {return Math.pow(a,b);}
​@Overridepublic double sqrt(int a) {return Math.sqrt(a);}
​@Overridepublic double sqrt(double a) {return Math.sqrt(a);}
​@Overridepublic double f(int a) {if(a==0||a==1){return 1;}else {return f(a-1)*a;}}
​@Overridepublic double minusPower(double a) {return pow(a,-1);}
​
​@Overridepublic double add(int a, int b) {return a+b;}
​@Overridepublic double sub(int a, int b) {return a-b;}
​@Overridepublic double mul(int a, int b) {return a*b;}
​@Overridepublic double div(int a, int b) {return a/b;}
​@Overridepublic double add(double a, double b) {return a+b;}
​@Overridepublic double sub(double a, double b) {return a-b;}
​@Overridepublic double mul(double a, double b) {return a*b;}
​@Overridepublic double div(double a, double b) {return a/b;}
}
​

package YMP.practical_Training.Test1_3;
​
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.zip.ZipEntry;
​
public class TestCalculator {
​public static void main(String[] args) {new MyCalculator().loadMyCalculator();}
}
​
class MyCalculator extends Arithmetic implements ActionListener, MouseListener {String strA = "";String strB = "";String strC = "";char operator = '~';
​private JButton[] bton;
​JTextField textField = new JTextField(10);
​
​Font font = new Font("宋体", Font.PLAIN, 30);
​
​
​
​private JDialog dialog;
​JCheckBox checkBoxRicegrey = new JCheckBox("米灰");JCheckBox checkBoxCream = new JCheckBox("米色");JCheckBox checkBoxCreamGreen = new JCheckBox("奶绿");JCheckBox checkBoxLemon = new JCheckBox("柠檬");JCheckBox checkBoxPink = new JCheckBox("佩奇");JCheckBox checkBoxRed = new JCheckBox("嫣红");JCheckBox checkBoxWhite=new JCheckBox("雪白");
​JCheckBox checkBoxFogBlue=new JCheckBox("雾蓝");
​JCheckBox checkBoxSkyBlue=new JCheckBox("天蓝");
​
​ButtonGroup buttonGroup = new ButtonGroup();
​
​Color thisColor;
​
​JPanel outerColour = new JPanel();JPanel inerColour = new JPanel();
​
​String bttonText[] = {"sin", "CE", "X!", "%", "÷","cos", "7", "8", "9", "×","tan", "4", "5", "6", "-","√", "1", "2", "3", "+","x^y", "1/x", "0", ".", "="};
​
​public void loadMyCalculator() {JFrame frame = new JFrame("计算器");frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);frame.setSize(650, 800);frame.setVisible(true);
​JPanel panel = new JPanel();
​bton=new JButton[25];
​JMenuBar menuBar = new JMenuBar();JMenu seting = new JMenu("设置");JMenuItem colour = new JMenuItem("颜色");
​
​seting.add(colour);menuBar.add(seting);frame.setJMenuBar(menuBar);
​buttonGroup.add(checkBoxRicegrey);buttonGroup.add(checkBoxCreamGreen);buttonGroup.add(checkBoxCream);buttonGroup.add(checkBoxLemon);buttonGroup.add(checkBoxPink);buttonGroup.add(checkBoxRed);buttonGroup.add(checkBoxWhite);buttonGroup.add(checkBoxFogBlue);buttonGroup.add(checkBoxSkyBlue);
​
​dialog = new JDialog();dialog.setSize(400, 400);dialog.setLayout(new GridLayout(3, 3));dialog.setLocation(100, 200);dialog.add(checkBoxRicegrey);dialog.add(checkBoxCreamGreen);dialog.add(checkBoxLemon);dialog.add(checkBoxCream);dialog.add(checkBoxPink);dialog.add(checkBoxRed);dialog.add(checkBoxWhite);dialog.add(checkBoxFogBlue);dialog.add(checkBoxSkyBlue);
​
​checkBoxCreamGreen.setFont(font);checkBoxPink.setFont(font);checkBoxCream.setFont(font);checkBoxLemon.setFont(font);checkBoxRicegrey.setFont(font);checkBoxRed.setFont(font);checkBoxWhite.setFont(font);checkBoxFogBlue.setFont(font);checkBoxSkyBlue.setFont(font);
​
​
​checkBoxRed.addItemListener(new ItemListener() {@Overridepublic void itemStateChanged(ItemEvent e) {if(e.getStateChange()==ItemEvent.SELECTED){thisColor=new Color(0xE57677);for(int i=0;i<bton.length;i++){if (i < 6 || i == 9 || i == 10 || i == 14 || i == 15 || (i >= 19 && i < 25)) {bton[i].setBackground(thisColor);}if (i >= 6 && i <= 8 || i >= 11 && i <= 13 || i >= 16 && i <= 18) {bton[i].setBackground(Color.white);}}
​}}});checkBoxPink.addItemListener(new ItemListener() {@Overridepublic void itemStateChanged(ItemEvent e) {if(e.getStateChange()==ItemEvent.SELECTED){thisColor=new Color(0xFDE3E3);for(int i=0;i<bton.length;i++){if (i < 6 || i == 9 || i == 10 || i == 14 || i == 15 || (i >= 19 && i < 25)) {bton[i].setBackground(thisColor);}if (i >= 6 && i <= 8 || i >= 11 && i <= 13 || i >= 16 && i <= 18) {bton[i].setBackground(Color.white);}}
​}}});checkBoxCream.addItemListener(new ItemListener() {@Overridepublic void itemStateChanged(ItemEvent e) {if(e.getStateChange()==ItemEvent.SELECTED){thisColor=new Color(0xEBE9E0 );for(int i=0;i<bton.length;i++){if (i < 6 || i == 9 || i == 10 || i == 14 || i == 15 || (i >= 19 && i < 25)) {bton[i].setBackground(thisColor);}if (i >= 6 && i <= 8 || i >= 11 && i <= 13 || i >= 16 && i <= 18) {bton[i].setBackground(Color.white);}}
​}}});checkBoxLemon.addItemListener(new ItemListener() {@Overridepublic void itemStateChanged(ItemEvent e) {if(e.getStateChange()==ItemEvent.SELECTED){thisColor=new Color(0xFFF450);for(int i=0;i<bton.length;i++){if (i < 6 || i == 9 || i == 10 || i == 14 || i == 15 || (i >= 19 && i < 25)) {bton[i].setBackground(thisColor);}if (i >= 6 && i <= 8 || i >= 11 && i <= 13 || i >= 16 && i <= 18) {bton[i].setBackground(Color.white);}}
​}}});checkBoxRicegrey.addItemListener(new ItemListener() {@Overridepublic void itemStateChanged(ItemEvent e) {if(e.getStateChange()==ItemEvent.SELECTED){thisColor=new Color(0xC2BFAC);for(int i=0;i<bton.length;i++){if (i < 6 || i == 9 || i == 10 || i == 14 || i == 15 || (i >= 19 && i < 25)) {bton[i].setBackground(thisColor);}if (i >= 6 && i <= 8 || i >= 11 && i <= 13 || i >= 16 && i <= 18) {bton[i].setBackground(Color.white);}}
​}}});checkBoxCreamGreen.addItemListener(new ItemListener() {@Overridepublic void itemStateChanged(ItemEvent e) {if(e.getStateChange()==ItemEvent.SELECTED){thisColor=new Color(0xF1F5D9 );for(int i=0;i<bton.length;i++){if (i < 6 || i == 9 || i == 10 || i == 14 || i == 15 || (i >= 19 && i < 25)) {bton[i].setBackground(thisColor);}if (i >= 6 && i <= 8 || i >= 11 && i <= 13 || i >= 16 && i <= 18) {bton[i].setBackground(Color.white);}}
​}}});
​checkBoxWhite.addItemListener(new ItemListener() {@Overridepublic void itemStateChanged(ItemEvent e) {if(e.getStateChange()==ItemEvent.SELECTED){thisColor=Color.white;for(int i=0;i<bton.length;i++){if (i < 6 || i == 9 || i == 10 || i == 14 || i == 15 || (i >= 19 && i < 25)) {bton[i].setBackground(thisColor);}if (i >= 6 && i <= 8 || i >= 11 && i <= 13 || i >= 16 && i <= 18) {bton[i].setBackground(Color.white);}}
​}}});
​checkBoxSkyBlue.addItemListener(new ItemListener() {@Overridepublic void itemStateChanged(ItemEvent e) {if(e.getStateChange()==ItemEvent.SELECTED){thisColor=new Color(0x72D9E2);for(int i=0;i<bton.length;i++){if (i < 6 || i == 9 || i == 10 || i == 14 || i == 15 || (i >= 19 && i < 25)) {bton[i].setBackground(thisColor);}if (i >= 6 && i <= 8 || i >= 11 && i <= 13 || i >= 16 && i <= 18) {bton[i].setBackground(Color.white);}}
​}}});
​checkBoxFogBlue.addItemListener(new ItemListener() {@Overridepublic void itemStateChanged(ItemEvent e) {if(e.getStateChange()==ItemEvent.SELECTED){thisColor=new Color(0x7EBBDD);for(int i=0;i<bton.length;i++){if (i < 6 || i == 9 || i == 10 || i == 14 || i == 15 || (i >= 19 && i < 25)) {bton[i].setBackground(thisColor);}if (i >= 6 && i <= 8 || i >= 11 && i <= 13 || i >= 16 && i <= 18) {bton[i].setBackground(Color.white);}}
​}}});
​
​
​colour.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {dialog.setVisible(true);}});
​
​frame.add(panel, BorderLayout.CENTER);
​panel.setLayout(new GridLayout(5, 5));
​
​textField.setPreferredSize(new Dimension(600, 200));frame.add(textField, BorderLayout.NORTH);textField.setFont(font);textField.setHorizontalAlignment(SwingConstants.RIGHT);
​
​for (int i = 0; i <25; i++) {bton[i]= new JButton(bttonText[i]);bton[i].setFont(font);panel.add(bton[i]);bton[i].addActionListener(this);
​//设置按钮颜色/* if (i < 6 || i == 9 || i == 10 || i == 14 || i == 15 || (i >= 19 && i < 25)) {bton.setActionCommand("outer");}if (i >= 6 && i <= 8 || i >= 11 && i <= 13 || i >= 16 && i <= 18) {bton.setActionCommand("iner");}
*/
​}bton[0].setActionCommand("s");
​
​bton[5].setActionCommand("c");
​
​bton[10].setActionCommand("t");
​
​
​bton[15].setActionCommand("√");
​
​bton[20].setActionCommand("^");
​
​bton[1].setActionCommand("E");bton[1].addMouseListener(this);
​
​bton[2].setActionCommand("!");
​
​bton[21].setActionCommand("m");
​
​
​}
​
​@Overridepublic void actionPerformed(ActionEvent e) {String action = e.getActionCommand();
​char act = action.charAt(0);
​
​if (act >= '0' && act <= '9' || act == '.') {if (operator != '~') {strB += action;if (operator == 's') {textField.setText("sin" + strB);} else if (operator == 'c') {textField.setText("cos" + strB);} else if (operator == 't') {textField.setText("tan" + strB);} elsetextField.setText(strA + operator + strB);} else {strA += action;textField.setText(strA);}
​
​} else if (act == '+' || act == '-' || act == '×' || act == '÷' || act == '%' || act == 's' || act == 'c' || act == 't' || act == '√' || act == '^' || act == '!' || act == 'm') {operator = act;if (operator == 'm') {textField.setText(strA + "(^-1)");} else if (operator == 's') {textField.setText("sin" + strB);} else if (operator == 'c') {textField.setText("cos" + strB);} else if (operator == 't') {textField.setText("tan" + strB);} else {textField.setText(strA + operator);}
​
​} else if (act == '=') {if (operator == '+') {double a = Double.parseDouble(strA);double b = Double.parseDouble(strB);double c = add(a, b);textField.setText(strA + operator + strB + "=" + c);
​} else if (operator == '-') {
​double a = Double.parseDouble(strA);double b = Double.parseDouble(strB);double c = sub(a, b);textField.setText(strA + operator + strB + "=" + c);
​
​} else if (operator == '×') {double a = Double.parseDouble(strA);double b = Double.parseDouble(strB);double c = mul(a, b);textField.setText(strA + operator + strB + "=" + c);
​
​} else if (operator == '÷') {double a = Double.parseDouble(strA);double b = Double.parseDouble(strB);double c = div(a, b);textField.setText(strA + operator + strB + "=" + c);
​} else if (operator == '%') {double a = Double.parseDouble(strA);double c = percent(a);textField.setText(strA + operator + "=" + c);
​} else if (operator == 's') {double b = Double.parseDouble(strB);double c = sin(b);textField.setText("sin" + strB + "=" + c);} else if (operator == 'c') {double b = Double.parseDouble(strB);double c = cos(b);textField.setText("cos" + strB + "=" + c);
​} else if (operator == 't') {double b = Double.parseDouble(strB);double c = tan(b);textField.setText("tan" + strB + "=" + c);
​} else if (operator == '√') {double a = Double.parseDouble(strA);double c = sqrt(a);textField.setText(strA + "√" + "=" + c);
​} else if (operator == '^') {double a = Double.parseDouble(strA);double b = Double.parseDouble(strB);double c = pow(a, b);textField.setText(strA + "^" + strB + "=" + c);
​} else if (operator == '!') {int a = Integer.parseInt(strA);double c = f(a);textField.setText(strA + "!" + "=" + c);
​} else if (operator == 'm') {double a = Double.parseDouble(strA);double c = minusPower(a);textField.setText(strA + "(^-1)" + "=" + c);}
​operator = '~';strA = "";strB = "";
​
​}}
​
​@Overridepublic void mouseClicked(MouseEvent e) {textField.setText("");operator = '~';strA = "";strB = "";
​
​}
​@Overridepublic void mousePressed(MouseEvent e) {
​}
​@Overridepublic void mouseReleased(MouseEvent e) {
​}
​@Overridepublic void mouseEntered(MouseEvent e) {
​}
​@Overridepublic void mouseExited(MouseEvent e) {
​}
​
​
​
​
}
​
​
​
​
​
​

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

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

相关文章

Google Earth Engine(GEE)——ui.DateSlider时间进度条的设置

结果 函数: ui.DateSlider(start, end, value, period, <

基于ACO蚁群优化的城市最佳出行路径规划matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于ACO蚁群优化的城市最佳出行路径规划matlab仿真&#xff0c;可以修改城市个数&#xff0c;输出路径规划结果和ACO收敛曲线。 2.测试软件版本以及运行结果展示…

Google trend搜索关键词

Google trend地址&#xff1a;https://trends.google.com/trends/?geoUS&hlzh-CN 1、具体的操作步骤如下&#xff1a; 2、Google trend搜索页面如下&#xff1a;

2024-06-23 编译原理实验3——语义分析

文章目录 一、实验要求二、实验设计三、实验结果四、附完整代码 补录与分享本科实验&#xff0c;以示纪念。 一、实验要求 基于前面的实验&#xff0c;编写一个程序对使用 C—语言书写的源代码进行语义分析&#xff0c;输出语义分析中发现的错误&#xff08;涉及 17 种错误类…

JVM专题二:Java如何进行编译的

编程语言分类 通常我们将编程语言分为高级语言和低级语言&#xff0c;通常高级语言因为其易用性和可移植性而被广泛使用&#xff0c;而低级语言在需要对硬件进行精细控制时非常有用&#xff0c;例如在嵌入式系统编程或操作系统开发中。 高级语言更接近人类语言&#xff0c;易于…

mac电脑守护神CleanMyMac2024免费版本下载

&#x1f31f; 电脑的守护神&#xff1a;CleanMyMac&#x1f47e; 亲爱的数码控们&#xff0c;是不是每次看到电脑上满满的垃圾文件和缓慢的运行速度就感到头疼呢&#xff1f;别怕&#xff0c;今天我要来给你们安利一款神奇的小帮手——CleanMyMac&#xff01;它可是我们电脑的…

【驱动篇】龙芯LS2K0300之LED驱动

实验目的 点亮龙芯开发板上面的用户自定义LED灯&#xff0c;编写LED驱动以及测试用例验证实现效果&#xff0c;LED位于开发板左下方&#xff08;靠近USB口&#xff09;第二个 原理图 LED通过电阻上拉至电源P3V3&#xff0c;低电平时LED被点亮 设备树 打开arch/loongarch/boo…

【职场人】如何与同事有效沟通

在职场中&#xff0c;沟通如同桥梁&#xff0c;连接着每一位职场人士的心灵与智慧。有效的沟通不仅能让工作更加顺畅&#xff0c;还能让团队关系更加和谐。那么&#xff0c;如何与同事进行有效沟通呢&#xff1f;下面&#xff0c;我将结合个人经验和一些幽默的比喻&#xff0c;…

[ThreadX] NetX DHCP 客户端API

1、常用API nx_dhcp_create&#xff1a;创建 DHCP 实例nx_dhcp_clear_broadcast_flag&#xff1a;清除客户端消息上的广播标记nx_dhcp_delete&#xff1a;删除 DHCP 实例nx_dhcp_decline&#xff1a;向服务器发送拒绝消息nx_dhcp_force_renew&#xff1a;发送强制续订消息nx_d…

音频数据集1--LJSpeech单人语音

LJ Speech Dataset 版本号: 1.1 , 文件大小: 2.6GB 1.简介 1. 1 内容简介 LJS是一个语音数据集&#xff0c;包含 13,100 个音频片段&#xff0c;内容为Linda Johnson(欧美女性)朗读的 7 本书籍段落(非小说类)。每个片段都提供文本转录&#xff0c;片段长度从 1 到 10 秒不等&…

八大排序之希尔排序

一、概念及其介绍 希尔排序(Shell Sort)是插入排序的一种&#xff0c;它是针对直接插入排序算法的改进。 希尔排序又称缩小增量排序&#xff0c;因 DL.Shell 于 1959 年提出而得名。 它通过比较相距一定间隔的元素来进行&#xff0c;各趟比较所用的距离随着算法的进行而减小…

什么是微分和导数?

文章目录 设立问题微分特性指数特性线性特性常数特性 多项式微分导数 在机器学习领域&#xff0c;有多种解决最优化问题的方法&#xff0c;其中之一就是使用微分。 通过微分&#xff0c;可以得知函数在某个点的斜率&#xff0c;也可以了解函数在瞬间的变化。 设立问题 请想象一…

HTML 教程

HTML 教程 HTML(HyperText Markup Language)是一种用于创建网页的标准标记语言。它描述了一个网站的结构骨架,使得浏览器能够展示具有特定格式的文本、链接、图片和其他内容。本教程将带你深入了解HTML的基础知识,包括其语法、常用标签以及如何构建一个基本的网页结构。 …

Tortoise 删除文件

1、右击需要删除的文件&#xff0c;选择Delete 2、提交

【查看显卡信息】——Ubuntu和windows

1、VMware虚拟机 VMware虚拟机上不能使用CUDA/CUDNN&#xff0c;也安装不了显卡驱动 查看显卡信息&#xff1a; lspci | grep -i vga 不会显示显卡信息&#xff0c;只会输出VMware SVGA II Adapter&#xff0c;表示这是一个虚拟机&#xff0c;无法安装和使用显卡驱动 使用上…

GitHub 标星 6

美国网友对这个大全给予了很高的评价&#xff1a;这份清单中列出的开源软件&#xff0c;不仅解决了硅谷大厂前员工的难处&#xff0c;也能为其他所有码农解除困惑。 在这套大全的指导下&#xff0c;任何一个工程师&#xff0c;都能获得类似在谷歌内部写代码的体验。xg2xg 上线…

fot循环语句

概念&#xff1a; 循环是一种重复执行一段代码的结构&#xff0c;只要满足循环的条件&#xff0c;会一种执行这个代码。 循环条件&#xff1a;在一定范围内&#xff0c;按照指定的次数来执行循环 循环体&#xff1a;在指定的次数内&#xff0c;执行的命令序列。只要条件满足…

骑马与砍杀-战团mod制作-基础篇-武器模型入骑砍(二)

骑马与砍杀战团mod制作-基础-武器模型入骑砍笔记&#xff08;二&#xff09; 资料来源 学习的资料来源&#xff1a; b站【三啸解说】手把手教你做【骑砍】MOD&#xff0c;基础篇&#xff0c;链接为&#xff1a; https://www.bilibili.com/video/BV19x411Q7No?p4&vd_sour…

模型计算量估计,训练时间预测 Scaling Laws for Neural Language Models

一、模型计算量 C ≈ 6N*D 其中C表示训练语言模型所需的总计算量&#xff0c;N表示模型参数量&#xff0c;D表示用于训练的语料总量&#xff0c;6表示每训练一个token所需的浮点计算量约为6N&#xff0c;其中前向计算2N&#xff0c;反向计算4N。 注意&#xff1a;这里的6是针…

前端小白指南:前端生成唯一设备标识的那些事儿

最近&#xff0c;我在使用javascript开发一个基于Chrome的插件&#xff0c;遇到了一个有意思的需求。插件需要生成一个授权码&#xff08;code&#xff09;&#xff0c;但为了确保安全性&#xff0c;这个code必须与设备绑定&#xff0c;防止被不同的设备使用&#xff0c;限制一…