package begin;
/*计算器:1.显示共两行,上为计算过程,下为计算结果或输入数字2.可同时实现多个实数的四则运算。3。运算范围为double。4.可按钮输入,也可键盘输入。5.每次只能从最高位向最低位输入。6.键盘输入加减乘除与按钮加减乘除有所不同,键盘输入的运算符会保留在输入栏。( 尚未找到解决方法   )7.只能输入数字、加、减、乘、除、等于、换行(回车)符,一个实数亦只能有一个小数点,若输入错误,计算将重新开始。*/public class MainClass {public static void main(String arg[]){Calculator test = new Calculator();test.display();}
}


代码不难理解,就不解释了,直接上代码

package begin;import java.math.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;public class Calculator extends JFrame {private JTextField tf1,tf2;   //过程框,输入及结果框private JButton btn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8,btn9,btn0,btnp;private JButton addBtn,subBtn,mulBtn,divBtn,equalBtn;private int cWidth=300, cHeight=400;private long count=0L;     //运算符号数目private double a=0,x=0;    //输入数字,运算结果private int mode=1;        //运算模式private double pointX=0;   //小数位private boolean flag =true;  //当前是否为a的第一个数字private boolean flagKey = false ; //当前是否为键盘输入private double stackNum[] = new double[100];   private int top=-1;Calculator(){super("计算器");super.setResizable(false);int sx=10,sy=10,dx=10,tfH=50,dy=10,btnDx=25;tf1 = new JTextField();tf1.setEditable(false);tf1.setBounds(sx, sy,cWidth-2*sx , tfH);tf1.setHorizontalAlignment(JTextField.RIGHT);tf1.setBackground(Color.WHITE);tf1.setBorder(null);tf1.setFont(new Font("Times",Font.CENTER_BASELINE,15));tf2 = new JTextField();tf2.setEditable(true);tf2.setBounds(sx, sy+tfH,cWidth-2*sx , tfH);tf2.setHorizontalAlignment(JTextField.RIGHT);tf2.setBorder(null);tf2.setFont(new Font("Times",Font.BOLD,20));int btnW=(cWidth-2*sx-3*btnDx)/4,btnH=btnW-btnW%10;sy=sy+tfH+tfH;addBtn = new JButton("+");addBtn.setFont(new Font("Times",Font.BOLD,20));//字体,粗体,字号addBtn.setBounds(sx, sy+dy, btnW, btnH);subBtn = new JButton("-");subBtn.setBounds(sx+btnDx+btnW, sy+dy, btnW, btnH);subBtn.setFont(new Font("Times",Font.BOLD,20));mulBtn = new JButton("*");mulBtn.setBounds(sx+2*(btnDx+btnW), sy+dy, btnW, btnH);mulBtn.setFont(new Font("Times",Font.BOLD,20));divBtn = new JButton("/");divBtn.setBounds(sx+3*(btnDx+btnW), sy+dy, btnW, btnH);divBtn.setFont(new Font("Times",Font.BOLD,20));sy=sy+dy+btnH+dy;btn1 = new JButton("1");btn1.setBounds(sx, sy, btnW, btnW);btn2 = new JButton("2");btn2.setBounds(sx+btnDx+btnW , sy, btnW, btnW);btn3 = new JButton("3");btn3.setBounds(sx+2*(btnDx+btnW), sy, btnW, btnW);btn0 = new JButton("0");btn0.setBounds(sx+3*(btnDx+btnW), sy, btnW, btnW);sy+=dy+btnH;btn4 = new JButton("4");btn4.setBounds(sx, sy, btnW, btnW);btn5 = new JButton("5");btn5.setBounds(sx+btnDx+btnW , sy, btnW, btnW);btn6 = new JButton("6");btn6.setBounds(sx+2*(btnDx+btnW), sy, btnW, btnW);btnp = new JButton(".");btnp.setBounds(sx+3*(btnDx+btnW), sy, btnW, btnW);btnp.setFont(new Font("Times",Font.BOLD,20));sy+=dy+btnH;btn7 = new JButton("7");btn7.setBounds(sx, sy, btnW, btnW);btn8 = new JButton("8");btn8.setBounds(sx+btnDx+btnW , sy, btnW, btnW);btn9 = new JButton("9");btn9.setBounds(sx+2*(btnDx+btnW), sy, btnW, btnW);equalBtn = new JButton("=");equalBtn.setBounds(sx+3*(btnDx+btnW), sy, btnW, btnW);equalBtn.setFont(new Font("Times",Font.BOLD,20));}public void display(){Container c = this.getContentPane();c.setLayout(null);c.add(tf1);    c.add(tf2);c.add(addBtn);c.add(subBtn);c.add(mulBtn);c.add(divBtn);c.add(btn0);c.add(btn1);c.add(btn2);c.add(btn3);c.add(btn4);c.add(btn5);c.add(btn6);c.add(btn7);c.add(btn8);c.add(btn9);c.add(btnp);c.add(equalBtn);MyEventHandler handler = new MyEventHandler();btn0.addActionListener(handler);btn1.addActionListener(handler);btn2.addActionListener(handler);btn3.addActionListener(handler);btn4.addActionListener(handler);btn5.addActionListener(handler);btn6.addActionListener(handler);btn7.addActionListener(handler);btn8.addActionListener(handler);btn9.addActionListener(handler);btnp.addActionListener(handler);addBtn.addActionListener(handler);subBtn.addActionListener(handler);mulBtn.addActionListener(handler);divBtn.addActionListener(handler);equalBtn.addActionListener(handler);MyKeyHandler keyHandler = new MyKeyHandler();tf2.addKeyListener(keyHandler);this.setSize(cWidth,cHeight);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setLocationRelativeTo(null);this.setVisible(true);}private class MyEventHandler implements ActionListener{public void actionPerformed(ActionEvent e){if(e.getSource()==btn1){flagKey = false;in1();}if(e.getSource()==btn2){flagKey = false;in2();   }if(e.getSource()==btn3){flagKey = false;in3();}if(e.getSource()==btn4){flagKey = false;in4();}if(e.getSource()==btn5){flagKey = false;in5();}if(e.getSource()==btn6){flagKey = false;in6();}if(e.getSource()==btn7){flagKey = false;in7();}if(e.getSource()==btn8){flagKey = false;in8();}if(e.getSource()==btn9){flagKey = false;in9();}if(e.getSource()==btn0){flagKey = false;in0();}if(e.getSource()==btnp){flagKey = false;inp();}if(e.getSource()==addBtn){flagKey = false;inadd();}if(e.getSource()==subBtn){flagKey = false;insub();}if(e.getSource()==mulBtn){flagKey = false;inmul();}if(e.getSource()==divBtn){flagKey = false;indiv();}if(e.getSource()==equalBtn){flagKey = false;inequal();}}}private void in1(){if(flagKey == false){String str = "1";if(flag)str = tf2.getText() + "1";elseflag = true;tf2.setText(str);}if(pointX>0){a+=1.0/pointX;pointX*=10;}elsea = a*10 + 1;}private void in2(){if(flagKey == false){String str = "2";if(flag)str = tf2.getText()+"2";elseflag = true;tf2.setText(str);}if(pointX>0){a+=2.0/pointX;pointX*=10;}elsea = a*10 + 2;}private void in3(){if(flagKey == false){String str = "3";if(flag)str = tf2.getText()+"3";elseflag = true;tf2.setText(str);}if(pointX>0){a+=3.0/pointX;pointX*=10;}elsea = a*10 + 3;}private void in4(){if(flagKey == false){String str = "4";if(flag)str = tf2.getText()+"4";elseflag = true;tf2.setText(str);}if(pointX>0){a+=4.0/pointX;pointX*=10;}elsea = a*10 + 4;}private void in5(){if(flagKey == false){String str = "5";if(flag)str = tf2.getText()+"5";elseflag = true;tf2.setText(str);}if(pointX>0){a+=5.0/pointX;pointX*=10;}elsea = a*10 + 5;}private void in6(){if(flagKey == false){String str = "6";if(flag)str = tf2.getText()+"6";elseflag = true;tf2.setText(str);}if(pointX>0){a+=6.0/pointX;pointX*=10;}elsea = a*10 + 6;}private void in7(){if(flagKey == false){String str = "7" ;if(flag)str =  tf2.getText()+"7";elseflag = true;tf2.setText(str);}if(pointX>0){a+=7.0/pointX;pointX*=10;}elsea = a*10 + 7;}private void in8(){if(flagKey == false){String str = "8";if(flag)str = tf2.getText()+"8";elseflag = true;tf2.setText(str);}if(pointX>0){a+=8.0/pointX;pointX*=10;}elsea = a*10 + 8;}private void in9(){if(flagKey == false){String str = "9";if(flag)str = tf2.getText()+"9";elseflag = true;tf2.setText(str);}if(pointX>0){a+=9.0/pointX;pointX*=10;}elsea = a*10 + 9;}private void in0(){if(flagKey == false){String str = "0";if(flag)str = tf2.getText()+"0";elseflag = true;tf2.setText(str);}if(pointX>0){a+=0.0/pointX;pointX*=10;}elsea = a*10 + 0;}private void inp(){if(pointX>0){infalse();return;}if(flagKey == false){String str = "0.";if(flag)str = tf2.getText()+".";elseflag = true;tf2.setText(str);}pointX=10;}private void inadd(){count++;switch(mode){case 1:stackNum[++top] = a;x+=a;break;case 2:stackNum[++top] = -a;x-=a;break;case 3:case 4:stackNum[top] = Calculate(stackNum[top],a);x+=  stackNum[top]; }String ac=Double.toString(a),xc=Double.toString(x);if(count==1){tf1.setText(xc.toString()+'+');tf2.setText("");}else{String str1 = tf1.getText() + ac+'+';tf1.setText(str1);tf2.setText(xc);}a=0;mode=1;flag=false;pointX=0;}private void insub(){count++;switch(mode){case 1:stackNum[++top] = a;x+=a;break;case 2:stackNum[++top] = -a;x-=a;break;case 3:case 4:stackNum[top] = Calculate(stackNum[top],a);x+=  stackNum[top]; }String ac=Double.toString(a),xc=Double.toString(x);if(count==1){tf1.setText(xc.toString()+'-');tf2.setText("");}else{String str1 = tf1.getText() + ac+'-';tf1.setText(str1);tf2.setText(xc);}a=0L;mode=2;flag=false;pointX=0;}private void inmul(){count++;if(mode<3||top==-1){if(mode==1)stackNum[++top] = a;elsestackNum[++top] = -a;}else{//System.out.println(stackNum[top]);stackNum[top]=Calculate(stackNum[top],a);  //此时 stackNum[top]i-1 =  ai*ai-1 或 ai/ai-1}String ac=Double.toString(a),xc=Double.toString(x);if(count==1){tf1.setText(ac.toString()+'*');tf2.setText("");}else{String str1 = tf1.getText() + ac+'*';tf1.setText(str1);tf2.setText(xc);}a=0;mode=3;flag=false;pointX=0;}private void indiv(){count++;if(mode<3||top==-1){if(mode==1)stackNum[++top] = a;elsestackNum[++top] = -a;}else{//System.out.println(stackNum[top]);stackNum[top]=Calculate(stackNum[top],a);  //此时 stackNum[top]i-1 =  ai*ai-1 或 ai/ai-1}String ac=Double.toString(a),xc=Double.toString(x);if(count==1){tf1.setText(xc.toString()+'/');tf2.setText("");}else{String str1 = tf1.getText() + ac+'/';tf1.setText(str1);tf2.setText(xc);}a=0;mode=4;flag=false;pointX=0;}private void inequal(){switch(mode){case 1:x+=a;break;case 2:x-=a;break;case 3:case 4:stackNum[top] = Calculate(stackNum[top],a);x+=  stackNum[top]; }String xc=Double.toString(x);tf1.setText("");tf2.setText(xc);//清空top=-1;count=0;a=0;mode=1;flag=false;pointX=0;x=0;}private void infalse(){JOptionPane.showMessageDialog(null, "输入数据有误,计算重新开始!");tf1.setText("");tf2.setText("");count=0;a=0;mode=1;flag=false;pointX=0;x=0;}private double Calculate(Double y,Double z){if(mode==1)return y+z;if(mode==2)return y-z;if(mode==3)return y*z;elsereturn y/z;}private class MyKeyHandler extends KeyAdapter{public void keyTyped(KeyEvent e){if(e.getKeyChar()=='\n'||e.getKeyChar()=='='){inequal();}else if(e.getKeyChar()=='+'){//tf2.setText("");inadd();}else if(e.getKeyChar()=='-'){insub();}else if(e.getKeyChar()=='*'){inmul();}else if(e.getKeyChar()=='/'){indiv();}else if(e.getKeyChar()=='0'){flagKey = true;in0();}else if(e.getKeyChar()=='1'){flagKey = true;in1();}else if(e.getKeyChar()=='2'){flagKey = true;in2();}else if(e.getKeyChar()=='3'){flagKey = true;in3();}else if(e.getKeyChar()=='4'){flagKey = true;in4();}else if(e.getKeyChar()=='5'){flagKey = true;in5();}else if(e.getKeyChar()=='6'){flagKey = true;in6();}else if(e.getKeyChar()=='7'){flagKey = true;in7();}else if(e.getKeyChar()=='8'){flagKey = true;in8();}else if(e.getKeyChar()=='9'){flagKey = true;in9();}else if(e.getKeyChar()=='.'){flagKey = true;inp();}else{infalse();}}}}

运行结果

转载于:https://www.cnblogs.com/107acm/p/9428338.html

Java入门 简易计算器相关推荐

  1. 简单计算器的设计java_(基于java的简易计算器的设计.doc

    (基于java的简易计算器的设计 基于java的简易计算器的设计 摘要 自从java语言诞生以来,java语言就以不可抵挡的趋势很快成为国际上广泛流行的面向对象编程语言,它既具有高级语言的特点,又少了 ...

  2. java实现简易计算器,实现加减乘除,括号,算式查错,

    java实现简易计算器 问题分析 一.计算机界面显示 二. 计算器计算数据处理 三. 部分源代码(该源码未加入算式查错,文件资源正在上传) 三.完整源码,加减乘除,括号,delete,算式查错 问题分 ...

  3. 基于java平台简易计算器_基于java的简易计算器的设计

    基于java的简易计算器的设计 基于java的简易计算器的设计 摘要 自从java语言诞生以来,java语言就以不可抵挡的趋势很快成为国际上广泛流行的面向对象编程语言,它既具有高级语言的特点,又少了C ...

  4. java编写简易计算器_java实现简易计算器功能

    本文为大家分享了java实现简易计算器功能,具体内容如下 题目: 编写一个模拟计算器的程序.在面板中添加一个文本框(显示按键及运算结果). 10个数字按钮(0~9).4个运算按钮(加.减.乘.除).一 ...

  5. JAVA作业-简易计算器

    工程名随意,文件名必须为Jisuanqi.java View Code import java.awt.BorderLayout; import java.awt.Color; import java ...

  6. 用Java实现简易计算器

    计算器      Java实现代码 package New; import java.util.Scanner; public class Calculator {     public double ...

  7. Java实现简易计算器

    使用Java语言编写一个简易的可以实现加.减.乘.除运算的程序,主要的方法是对Java面板组件的应用和数据类型的转换. package one;import java.awt.Font; import ...

  8. java实现简易计算器完整代码

    早晨起来没事,打开mac突然想写个小程序,就写来个简易的计算器,可以实现基本的运算,测试目前无bug,下面分享下自己的代码. 首先写了个简单的界面如下: 整个面板用了BorderLayout布局,分为 ...

  9. java双精度简易计算器_java小计算器

    [java]代码库import java.awt.*; import java.awt.event.*; import javax.swing.JButton; import javax.swing. ...

最新文章

  1. mysql 5.7.16默认密码_(转)Ubuntu16安装mysql5.7未提示输入密码,安装后修改mysql默认密码...
  2. WPF 路由事件初步
  3. 分享丨10年DBA老司机整理的Oracle学习路线图
  4. git 如何同步本地tag与远程tag
  5. zabbix学习小结
  6. ABAP Netweaver和Hybris里获得内存使用统计数据
  7. 终于有人把超融合和边缘计算说清楚了
  8. kafka分区与分组原理_大数据技术-Kafka入门
  9. C语言?看女程序员是怎么往死里坑师兄的
  10. 7-176 求n以内最大的k个素数以及它们的和 (20 分)
  11. datepicker 属性设置 以及方法和事件
  12. 浅谈Get和Post方法的区别与TCP与UDP区别
  13. OpenCV-Python教程(6、Sobel算子)
  14. MySql常用函数大全(详细)
  15. pp加速器各种问题官方最新回答
  16. linux中su 与su-的区别
  17. Mysql Workbench connection ssl not enable问题解决
  18. scikit-image库-- 圆形和椭圆形霍夫变换(十七)
  19. Win10左下角搜索栏以及资源管理器搜索栏无法使用(点击没有反应)
  20. RHCSA之账户与安全_创建账户与组(useradd.groupadd.id)

热门文章

  1. 如何提高SSD的使用寿命
  2. IIS识别Json文件
  3. 3/3 常用符号:转义字符
  4. !--#include virtual='head.html'--代码复用
  5. 2018年12月2526日
  6. 程序员的800字作文
  7. Redhat 6.2安装Oracle 11gclient及遇到的问题分析
  8. 系统消息发现有新的未读消息弹框提示
  9. Winform 打印PDF顺序混乱,获取打印队列
  10. 工作三年的一点感想(展望篇)