package calculate;
/*** @author Wayne;* @time 2014年7月14日;* @project java计算器2.0;*/import java.awt.*;
import java.awt.event.*;
import java.text.DecimalFormat;import javax.swing.*;
import javax.swing.JOptionPane;
import javax.script.*;public class Calcul extends JFrame implements ActionListener,KeyListener
{private static final long serialVersionUID = 6256855493544342895L;//一些全局初始化JPanel buttonPanel = new JPanel(new GridLayout(5,4,3,3));//定义5*4网格,横向竖向间距为3pxJTextField dataspace = new JTextField("");//显示输入的文本JTextField message = new  JTextField("就绪");//标题用户显示提示信息String str[] = {"清除(C)","←","(",")","7","8","9","÷","4","5","6","×","1","2","3","-",".","0","等于(R)","+"};//按钮文字private JButton btn[] = new JButton[str.length];//新建按钮//字体和颜色Font font = new Font("微软雅黑",Font.BOLD,22);//字体初始化Color wordcolor = new Color(255,255,255);//字体设置为白色Color textboxcolor = new Color(124,97,76);//消息框颜色为灰色Color textboxcolor1 = new Color(125,125,125);//文本框颜色为灰色public Calcul(){//一些初始化setTitle("计算器");setSize(WIDTH,HEIGHT);setResizable(false);setIconImage(Toolkit.getDefaultToolkit().getImage("icon.png"));//增加按钮并设置监听颜色等for(int i = 0;i<str.length;i++){btn[i] = new JButton(str[i]);btn[i].setFont(font);btn[i].addActionListener(this);btn[i].addKeyListener(this);// if((i>3 && i<7 ) || (i>7 && i<11) || ( i>11 && i<15) || i == 17)btn[i].setBackground(new Color(104,152,104));//else//   btn[i].setBackground(new Color(99,154,157));
            btn[i].setForeground(wordcolor);buttonPanel.add(btn[i]);  }btn[0].setBackground(new Color(204,88,56));btn[7].setBackground(new Color(67,160,193));btn[11].setBackground(new Color(67,160,193));btn[15].setBackground(new Color(67,160,193));btn[19].setBackground(new Color(67,160,193));message.addKeyListener(this);//增加文本面板
JPanel textPanel = new JPanel(new GridLayout(2,1));//将文本框加入到文本面板中//提示框
        message.setFont(font);message.setPreferredSize(new Dimension(30,50));message.setBackground(textboxcolor);message.setForeground(wordcolor);message.setEditable(false);textPanel.add(message);//缓冲区
        dataspace.setFont(font);dataspace.setPreferredSize(new Dimension(30,60));dataspace.setBackground(textboxcolor1);dataspace.setForeground(wordcolor);dataspace.setEditable(false);textPanel.add(dataspace);//将组件加入到容器中Container contentPane = getContentPane();contentPane.add(buttonPanel,BorderLayout.CENTER);contentPane.add(textPanel,BorderLayout.NORTH);}public static final int WIDTH = 500;public static final int HEIGHT = 500;public static void main(String[] args){Calcul frame = new Calcul();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();frame.setLocation((dim.width - 350)/2,(dim.height - 500)/2);frame.setVisible(true);}//判断输入是否为+-*/.的函数public boolean NotSymbol(String str){char strc = str.charAt(0);if(strc == '*' || strc == '/' || strc == '+' || strc == '-' || strc == '.'){return false;}else {    return true;}}//判断前一个是否为+-*/.的函数public boolean PreNotSym(String str){String pre = str.substring(str.length()-1, str.length());if(NotSymbol(pre))return true;else return false;}//追加函数public String addnum(String add){String addbefore=dataspace.getText().trim();String addafter = null;message.setText("输入的为:");if(addbefore.length() == 0 ){if(NotSymbol(add))addafter=addbefore+add;else if( !NotSymbol(add))addafter = addbefore;}else if(addbefore.length() >= 2 ){if(PreNotSym(addbefore)){addafter=addbefore+add;}else {if(NotSymbol(add))addafter = addbefore + add;else if( !NotSymbol(add))addafter = addbefore;}}else if(addbefore.length() == 1){addafter = addbefore + add;}return addafter;}@Overridepublic void actionPerformed(ActionEvent e){//清空if (e.getSource() == btn[0] ){message.setText("就绪");dataspace.setText("");}//退格else if (e.getSource() == btn[1]){message.setText("就绪");String data = dataspace.getText().trim();if(data.length()>0){if(data.charAt(0) != '-'){if(data.length() >1){if(data.charAt(data.length() - 2) == '.'){data = data.substring(0,data.length() -1);dataspace.setText(data);}data = data.substring(0,data.length() - 1);dataspace.setText(data);}    else if(data.length() == 1){dataspace.setText("");}}else if(data.charAt(0) == '-'){if(data.length() >2){if(data.charAt(data.length() - 2) == '.'){data = data.substring(0,data.length() -1);dataspace.setText(data);}data = data.substring(0,data.length() - 1);dataspace.setText(data);}    else if(data.length() == 2){dataspace.setText("0");}}else if(data == "0"){dataspace.setText("");}}else{}}//左括号else if(e.getSource() == btn[2]){String key = "(";dataspace.setText(addnum(key));}//右括号else if(e.getSource() == btn[3]){String key = ")";dataspace.setText(addnum(key));}        //等号else if(e.getSource() == btn[18]){message.setText("计算得到的结果为:");ScriptEngineManager sem = new ScriptEngineManager();        ScriptEngine se = sem.getEngineByName("js");try{    int leng = dataspace.getText().length();if(leng==0){message.setText("你好像没输入数据哦~!");                                        }else{            DecimalFormat df = new DecimalFormat("#.##"); //设置数据格式 Object  result = se.eval(dataspace.getText());double value = Double.parseDouble(df.format(result)); String valuestr = String.valueOf(value);dataspace.setText(valuestr);}}catch (ScriptException evt){message.setText("表达式似乎有错呢!请重新编辑");    }        catch(NumberFormatException evt){message.setText("除数不能为0哦,请重新编辑");}}//加点else if(e.getSource() == btn[16]){String key = ".";dataspace.setText(addnum(key));}//加号else if(e.getSource() == btn[19]){String key = "+";dataspace.setText(addnum(key));}//减号else if(e.getSource() == btn[15]){String key = "-";dataspace.setText(addnum(key));}//乘号else if(e.getSource() == btn[11]){String key = "*";dataspace.setText(addnum(key));}//除号else if(e.getSource() == btn[7]){String key = "/";dataspace.setText(addnum(key));}//数字7else if(e.getSource() == btn[4]){String key = "7";dataspace.setText(addnum(key));}//数字8else if(e.getSource() == btn[5]){String key = "8";dataspace.setText(addnum(key));}//数字9else if(e.getSource() == btn[6]){String key = "9";dataspace.setText(addnum(key));}//数字4else if(e.getSource() == btn[8]){String key = "4";dataspace.setText(addnum(key));}//数字5else if(e.getSource() == btn[9]){String key = "5";dataspace.setText(addnum(key));}//数字6else if(e.getSource() == btn[10]){String key = "6";dataspace.setText(addnum(key));}//数字1else if(e.getSource() == btn[12]){String key = "1";dataspace.setText(addnum(key));}//数字2else if(e.getSource() == btn[13]){String key = "2";dataspace.setText(addnum(key));}//数字3else if(e.getSource() == btn[14]){String key = "3";dataspace.setText(addnum(key));}//数字0else if(e.getSource() == btn[17]){String key = "0";dataspace.setText(addnum(key));}}@Overridepublic void keyTyped(KeyEvent e) {// TODO 自动生成的方法存根
        }@Override//按下按钮public void keyReleased(KeyEvent e) {int keycode = e.getKeyCode();//退出if(keycode == 81){int i = JOptionPane.showConfirmDialog(null, "是否退出?","提示:", JOptionPane.YES_NO_OPTION);if(i == JOptionPane.OK_OPTION){System.exit(0);}else{ }}//清空if (keycode == 67 ){message.setText("就绪");dataspace.setText("");}//点else if(keycode == 110){String key = ".";dataspace.setText(addnum(key));}//加号else if(keycode == 107){String key = "+";dataspace.setText(addnum(key));}//减号else if(keycode == 109){String key = "-";dataspace.setText(addnum(key));}//乘号else if(keycode == 106){String key = "*";dataspace.setText(addnum(key));}//除号else if(keycode == 111){String key = "/";dataspace.setText(addnum(key));}//数字7else if(keycode == 103 || keycode == 55){String key = "7";dataspace.setText(addnum(key));}//数字8else if(keycode == 104 || keycode == 56){String key = "8";dataspace.setText(addnum(key));}//数字9else if(keycode == 105 || (keycode == 57  && !e.isShiftDown())){String key = "9";dataspace.setText(addnum(key));}//数字4else if(keycode == 100 || keycode == 52){String key = "4";dataspace.setText(addnum(key));}//数字5else if(keycode == 101 || keycode == 53){String key = "5";dataspace.setText(addnum(key));}//数字6else if(keycode == 102 || keycode == 54){String key = "6";dataspace.setText(addnum(key));}//数字1else if(keycode == 97 || keycode == 49){String key = "1";dataspace.setText(addnum(key));}//数字2else if(keycode == 98 || keycode == 50){String key = "2";dataspace.setText(addnum(key));}//数字3else if(keycode == 99 || keycode == 51){String key = "3";dataspace.setText(addnum(key));}//数字0else if(keycode == 96 || (keycode == 48 && !e.isShiftDown())){String key = "0";dataspace.setText(addnum(key));}//按下Relse if(keycode == 82){message.setText("计算得到的结果为:");ScriptEngineManager sem = new ScriptEngineManager();        ScriptEngine se = sem.getEngineByName("js");try{    int leng = dataspace.getText().length();if(leng==0){message.setText("你好像没输入数据哦!");                                        }else{            DecimalFormat df = new DecimalFormat("#.##"); //设置数据格式 Object  result = se.eval(dataspace.getText());double value = Double.parseDouble(df.format(result)); String valuestr = String.valueOf(value);dataspace.setText(valuestr);}}catch (ScriptException evt){message.setText("表达式似乎有错呢!请重新编辑");    }catch(NumberFormatException evt){message.setText("除数不能为0哦,请重新编辑");}}//按下Backspaceelse if (keycode == 8){message.setText("就绪");String data = dataspace.getText().trim();if(data.length()>0){if(data.charAt(0) != '-'){if(data.length() >1){if(data.charAt(data.length() - 2) == '.'){data = data.substring(0,data.length() -1);dataspace.setText(data);}data = data.substring(0,data.length() - 1);dataspace.setText(data);}    else if(data.length() == 1){dataspace.setText("");}}else if(data.charAt(0) == '-'){if(data.length() >2){if(data.charAt(data.length() - 2) == '.'){data = data.substring(0,data.length() -1);dataspace.setText(data);}data = data.substring(0,data.length() - 1);dataspace.setText(data);}    else if(data.length() == 2){dataspace.setText("0");}}else if(data == "0"){dataspace.setText("");}}else{}}//左括号else if(keycode == 57 && e.isShiftDown()){String key = "(";dataspace.setText(addnum(key));}//右括号else if(keycode == 48 && e.isShiftDown()){String key = ")";dataspace.setText(addnum(key));}}@Overridepublic void keyPressed(KeyEvent e) {// TODO 自动生成的方法存根
        }
}

小学期自己写的一个程序,功能简单。没有bug

转载于:https://www.cnblogs.com/waynehfut/p/3869197.html

使用Java实现的简单的计算器相关推荐

  1. Java实现一个简单的计算器,实现计算器中加、减、乘、除的运算方法

    java实现一个简单的计算器 import java.util.Scanner; public class Calculation{public static void main(String[] a ...

  2. 编写java程序模拟简单的计算器

    /*** 编写java程序模拟简单的计算器* 定义名为Number的类其中有两个整型数据成员变量n1和n2应该声明为私有* 编写构造方法赋予n1和n2初始值* 再为该类定义加addition().减s ...

  3. java swing实现简单的计算器源代码程序

    原文:java swing实现简单的计算器源代码程序 源代码下载地址:http://www.zuidaima.com/share/1792762695060480.htm 陌落馨 2014-04-23 ...

  4. 计算机课设:基于Java实现的简单科学计算器

    设计目的 对Java课程知识的总结,进一步提高对Java语言的理解与掌握 深入的理解Java语言,并将其中抽象概念运用到实际编程中,锻炼学生的课题分析和解决问题的能力,培养正确的编程习惯 培养自主学习 ...

  5. java体重指数计算器程序_用Java编写一个简单的计算器程序

    展开全部 import java.awt.*; import java.awt.event.*; public class CalcAppDemo extends Frame{ private Tex ...

  6. java 计算器_用Java编写一个简单的计算器

    1.使用记事本或eclipse等编程工具,建立一个图形界面应用程序. 2.程序完成简单的四则计算功能 3.用户可以在名为Number1和Number2的文本输入框中输入2个操作数,然后点击下面的4个按 ...

  7. 用java编写计算器_用Java编写一个简单的计算器

    1.使用记事本或eclipse等编程工具,建立一个图形界面应用程序. 2.程序完成简单的四则计算功能 3.用户可以在名为Number1和Number2的文本输入框中输入2个操作数,然后点击下面的4个按 ...

  8. 通过JAVA swing 实现简单的计算器功能(待完善)

    考虑到要实现实际生活中的计算器模型,这次实验我选择采用java中的GUI图形用户界面来完成计算器的设计. 简单计算器的实现 整体设计 简单计算器的实现 JFrame画板 布局和美观化 事件监听 监听功 ...

  9. java 做计算器 百度云_用Java做一个简单的计算器

    窗体 package Calc; import java.awt.*; import java.awt.event.*; import javax.swing.*; /** * * 计算器程序6261 ...

最新文章

  1. TypeError: cannot concatenate ‘str‘ and ‘list‘ objects
  2. Python 数值计算库之-[Pandas](六)
  3. 存储器芯片巨头动态观察:三星、美光、SK海力士都在做什么?
  4. SICP~计算机程序的构造和解释~ 1.12 c++实现
  5. unix c线程同步的三种方法:互斥量、读写锁以及条件变-xhb8413-ChinaUnix博客
  6. 解决python中TypeError: not enough arguments for format stringj
  7. 爱思助手短信备份到安卓_爱思助手 Bug 修复,完美降级10.3.3
  8. java程序员必须会的技能
  9. 练习-图书馆管理系统
  10. PHP中smart原则,制定目标时的SMART原则不包括什么
  11. 易基因 | 转录组测序在原核生物研究中的应用(4)| 文献科普
  12. 饼图出现超过100%的比例——基础积累
  13. c语言 习题错题知识点(1) (关键字 合法数据类型 逗号运算符)
  14. 《树莓派实战秘籍》——1.15 技巧15连接GPIO脚到面包板上
  15. FTT暴雷加密熊市雪上加霜?如何对抗系统风险
  16. Base64 和 MD5 加密
  17. 【项目】实现一个mini的tcmalloc(高并发内存池)
  18. 大厂小厂都在用的RAID软件磁盘阵列技术,必须学起来!
  19. 2017年的奋斗目标
  20. IDM下载百度网盘教程

热门文章

  1. SQL Server 数据库所有者
  2. 网站安全之nginx的配置创建访问网站密码认证
  3. ASP.NET web.config
  4. Vista开发之旅:微软开发技术20年回顾
  5. QComboBox可以随意设置itemData的数值
  6. PHP面试之二:高并发与大数据
  7. Android 小技巧
  8. 批量插入使用SqlBulkCopy
  9. [IE9] 开发IE9上的屏幕取词功能
  10. android 跳转到小米手机神隐模式