java实现计算器功能_用java实现计算器功能
/*** 一个计算器,与Windows附件自带计算器的标准版功能、界面相仿。 但还不支持键盘操作。*/public classMyCalculator extendsJFrame implementsActionListener {
/** 计算器上的键的显示名字 */private finalString[] KEYS= { "7","8","9","/","sqrt","4","5","6","*","%","1","2","3","-","1/x","0","+/-",".","+","="};/** 计算器上的功能键的显示名字 */private finalString[] COMMAND= { "Backspace","CE","C"};/** 计算器左边的M的显示名字 */private finalString[] M= { " ","MC","MR","MS","M+"};/** 计算器上键的按钮 */privateJButton keys[] = newJButton[KEYS.length];/** 计算器上的功能键的按钮 */privateJButton commands[] = newJButton[COMMAND.length];/** 计算器左边的M的按钮 */privateJButton m[] = newJButton[M.length];/** 计算结果文本框 */privateJTextField resultText= newJTextField("0");// 标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字private booleanfirstDigit= true;// 计算的中间结果。private doubleresultNum= 0.0;// 当前运算的运算符privateString operator= "=";// 操作是否合法private booleanoperateValidFlag= true;/*** 构造函数*/publicMyCalculator() {
super();// 初始化计算器init();// 设置计算器的背景颜色this.setBackground(Color.LIGHT_GRAY);this.setTitle("计算器");// 在屏幕(500, 300)坐标处显示计算器this.setLocation(500,300);// 允许修改计算器的大小this.setResizable(true);// 使计算器中各组件大小合适this.pack();}
/*** 初始化计算器*/private voidinit() {
// 文本框中的内容采用右对齐方式resultText.setHorizontalAlignment(JTextField.RIGHT);// 不允许修改结果文本框resultText.setEditable(false);// 设置文本框背景颜色为白色resultText.setBackground(Color.WHITE);// 初始化计算器上键的按钮,将键放在一个画板内JPanel calckeysPanel = newJPanel();// 用网格布局器,4行,5列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素calckeysPanel.setLayout(newGridLayout(4,5,3,3));for(inti = 0;i < KEYS.length;i++) {
keys[i] = newJButton(KEYS[i]);calckeysPanel.add(keys[i]);keys[i].setForeground(Color.blue);}
// 运算符键用红色标示,其他键用蓝色表示keys[3].setForeground(Color.red);keys[8].setForeground(Color.red);keys[13].setForeground(Color.red);keys[18].setForeground(Color.red);keys[19].setForeground(Color.red);// 初始化功能键,都用红色标示。将功能键放在一个画板内JPanel commandsPanel = newJPanel();// 用网格布局器,1行,3列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素commandsPanel.setLayout(newGridLayout(1,3,3,3));for(inti = 0;i < COMMAND.length;i++) {
commands[i] = newJButton(COMMAND[i]);commandsPanel.add(commands[i]);commands[i].setForeground(Color.red);}
// 初始化M键,用红色标示,将M键放在一个画板内JPanel calmsPanel = newJPanel();// 用网格布局管理器,5行,1列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素calmsPanel.setLayout(newGridLayout(5,1,3,3));for(inti = 0;i < M.length;i++) {
m[i] = newJButton(M[i]);calmsPanel.add(m[i]);m[i].setForeground(Color.red);}
// 下面进行计算器的整体布局,将calckeys和command画板放在计算器的中部,// 将文本框放在北部,将calms画板放在计算器的西部。// 新建一个大的画板,将上面建立的command和calckeys画板放在该画板内JPanel panel1 = newJPanel();// 画板采用边界布局管理器,画板里组件之间的水平和垂直方向上间隔都为3象素panel1.setLayout(newBorderLayout(3,3));panel1.add("North",commandsPanel);panel1.add("Center",calckeysPanel);// 建立一个画板放文本框JPanel top = newJPanel();top.setLayout(newBorderLayout());top.add("Center",resultText);// 整体布局getContentPane().setLayout(newBorderLayout(3,5));getContentPane().add("North",top);getContentPane().add("Center",panel1);getContentPane().add("West",calmsPanel);// 为各按钮添加事件侦听器// 都使用同一个事件侦听器,即本对象。本类的声明中有implements ActionListenerfor(inti = 0;i < KEYS.length;i++) {
keys[i].addActionListener(this);}
for(inti = 0;i < COMMAND.length;i++) {
commands[i].addActionListener(this);}
for(inti = 0;i < M.length;i++) {
m[i].addActionListener(this);}
}
/*** 处理事件*/public voidactionPerformed(ActionEvent e) {
// 获取事件源的标签String label = e.getActionCommand();if(label.equals(COMMAND[0])) {
// 用户按了"Backspace"键handleBackspace();} else if(label.equals(COMMAND[1])) {
// 用户按了"CE"键resultText.setText("0");} else if(label.equals(COMMAND[2])) {
// 用户按了"C"键handleC();} else if("0123456789.".indexOf(label) >= 0) {
// 用户按了数字键或者小数点键handleNumber(label);// handlezero(zero);} else{
// 用户按了运算符键handleOperator(label);}
}
/*** 处理Backspace键被按下的事件*/private voidhandleBackspace() {
String text = resultText.getText();inti = text.length();if(i > 0) {
// 退格,将文本最后一个字符去掉text = text.substring(0,i - 1);if(text.length() == 0) {
// 如果文本没有了内容,则初始化计算器的各种值resultText.setText("0");firstDigit= true;operator= "=";} else{
// 显示新的文本resultText.setText(text);}
}
}
/*** 处理数字键被按下的事件**@paramkey*/private voidhandleNumber(String key) {
if(firstDigit) {
// 输入的第一个数字resultText.setText(key);} else if((key.equals(".")) && (resultText.getText().indexOf(".") < 0)) {
// 输入的是小数点,并且之前没有小数点,则将小数点附在结果文本框的后面resultText.setText(resultText.getText() + ".");} else if(!key.equals(".")) {
// 如果输入的不是小数点,则将数字附在结果文本框的后面resultText.setText(resultText.getText() + key);}
// 以后输入的肯定不是第一个数字了firstDigit= false;}
/*** 处理C键被按下的事件*/private voidhandleC() {
// 初始化计算器的各种值resultText.setText("0");firstDigit= true;operator= "=";}
/*** 处理运算符键被按下的事件**@paramkey*/private voidhandleOperator(String key) {
if(operator.equals("/")) {
// 除法运算// 如果当前结果文本框中的值等于0if(getNumberFromText() == 0.0) {
// 操作不合法operateValidFlag= false;resultText.setText("除数不能为零");} else{
resultNum/= getNumberFromText();}
} else if(operator.equals("1/x")) {
// 倒数运算if(resultNum== 0.0) {
// 操作不合法operateValidFlag= false;resultText.setText("零没有倒数");} else{
resultNum= 1/ resultNum;}
} else if(operator.equals("+")) {
// 加法运算resultNum+= getNumberFromText();} else if(operator.equals("-")) {
// 减法运算resultNum-= getNumberFromText();} else if(operator.equals("*")) {
// 乘法运算resultNum*= getNumberFromText();} else if(operator.equals("sqrt")) {
// 平方根运算resultNum= Math.sqrt(resultNum);} else if(operator.equals("%")) {
// 百分号运算,除以100resultNum= resultNum/ 100;} else if(operator.equals("+/-")) {
// 正数负数运算resultNum= resultNum* (-1);} else if(operator.equals("=")) {
// 赋值运算resultNum= getNumberFromText();}
if(operateValidFlag) {
// 双精度浮点数的运算longt1;doublet2;t1 = (long) resultNum;t2 = resultNum- t1;if(t2 == 0) {
resultText.setText(String.valueOf(t1));} else{
resultText.setText(String.valueOf(resultNum));}
}
// 运算符等于用户按的按钮operator= key;firstDigit= true;operateValidFlag= true;}
/*** 从结果文本框中获取数字**@return*/private doublegetNumberFromText() {
doubleresult = 0;try{
result = Double.valueOf(resultText.getText()).doubleValue();} catch(NumberFormatException e) {
}
returnresult;}
public static voidmain(String args[]) {
MyCalculator calculator1 = newMyCalculator();calculator1.setVisible(true);calculator1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}
}
java实现计算器功能_用java实现计算器功能相关推荐
- java项目----教务管理系统_基于Java的教务管理系统
java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...
- java 1.6 最大化_关于java:JDK 1.6和1.7中的新功能
我很了解JDK 1.5.众所周知,除了新的API(例如AtomicInteger),还有一些主要的语言更改,例如提供对泛型的支持.添加枚举.私有化自动装箱和自动取消装箱等. 我想找到一些资源,它们最好 ...
- java全文检索功能_基于Java的全文检索引擎简介
Lucene是一个基于Java的全文索引工具包. 基于Java的全文索引引擎Lucene简介:关于作者和Lucene的历史 全文检索的实现:Luene全文索引和数据库索引的比较 中文切分词机制简介:基 ...
- java mysql点赞功能_用Java做一个类似于微博QQ空间点赞的功能-Fun言
点赞是一个互动性很强的功能,网站加入点赞可以增强用户之间的亲密度,可以利用点赞排出受欢迎文章或者其他的列表,所以今天教大家如何做一个类似于微博.QQ空间的点赞功能 需求分析: 首先要明确这个功能是需要 ...
- 超市管理系统java swing+mysql报告_基于java+swing+mysql的超市管理系统
运行环境:java jdk 1.8 IDE环境:Eclipse,Myeclipse,IDEA都可以 硬件环境:windows 7/8/10 2G内存以上(推荐4G,4G以上更好) 可以实现: 销售管理 ...
- java是什么格式_是java格式
错误:编码GBK的不可映射字符的解决办法 最近在重新补javaSE的基础,编辑器编写完代码以后,在控制台运行代码段的时候,出现了以下的错误提示:错误:编码GBK的不可映射字符 在通过查询谷哥和度娘以后 ...
- java农产品查询系统_基于java的农产品销售系统的设计与实现论文.docx
基于java的农产品销售系统的设计与实现论文.docx 分类号_______________ 密级________________ UDC _______________ 学号_毕业设计(论文)论文题 ...
- JAVA redis缓存过期_失效java服务器
Java 并发/多线程教程--4并发模型 本系列译自jakob jenkov的Java并发多线程教程(本章节部分内容参考http://ifeve.com/并发编程模型),个人觉得很有收获.由于个人水平 ...
- Java的泛型特性_学习Java的重中之重!
Java的"泛型"特性,你以为自己会了 使用Java的小伙伴,对于Java的一些高级特性一定再熟悉不过了,例如集合.反射.泛型.注解等等,这些可以说我们在平时开发中是经常使用到的, ...
- java 版本查看命令_查看Java版本命令如何查看?Java常用命令详解
现在程序员开发项目都在使用工具,很多人可能都忘记了Java自带命令,下面就让我来介绍些吧. 1.java.exe: 运行java程序,这个相信每一位用Java的人知道了. 2.javac.exe: 编 ...
最新文章
- luogu P3455 [POI2007]ZAP-Queries (莫比乌斯反演 + 整除分块)
- 第五课.可变图结构下的归纳式学习图注意力
- 携手长江天成转型 谋定·农业大健康-林裕豪:升级山茶油农产品
- surefire单元测试 并发 提速
- 虚拟机如何上网以及互ping问题
- ORACLE 11g安装图解
- java acm包,Java利用ACM外置包的基本图形操作
- 实战:基于服务端开发和前后端分离开发区别
- 基于大数据挖掘----浅谈大数据与大数据挖掘
- 中国黑客常用的八种工具及其防御方法(转)
- Canvas 画直线
- Python 获取LOL所有英雄的传说
- Ubuntu16.04 + TITAN XP 深度学习服务器环境搭建(驱动安装,CUNN7.6.5, CUDA9.0) (避坑篇)
- Python 第三方模块 科学计算 SciPy模块4 线性代数1
- 企业微信之发送应用消息案例
- oracle数据库什么情况下创建索引比较好
- 运动会分数统计的实验报告(数组实现)
- cordova打包app热更新问题
- 2022劳务员-岗位技能(劳务员)特种作业证考试题库及模拟考试
- LDO和BUCK降压稳压器对比
热门文章
- Java简繁体汉字转化
- html中如何做背景渐变,html如何设置背景径向渐变
- origin数据平滑_Origin平滑曲线怎么设置?平滑曲线处理方法讲解
- TapTap推广统计逻辑
- python中sorted函数逆序_python中sorted函数
- python实现sorted函数_Python sorted函数及用法
- Self-Supervised 3D Face Reconstruction via Conditional Estimation
- led伏安特性实验误差分析_伏安法测量误差分析-北京新东方
- 【C语言】贪吃蛇小游戏代码详解
- 外贸人必收藏开发客户、找邮箱等高效工具