使用Java实现的简单的计算器

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网格,横向竖向间距为3px
    JTextField 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;
    }
    @Override
    public 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));
        }

        //数字7
        else if(e.getSource() == btn[4])
        {
            String key = "7";
            dataspace.setText(addnum(key));
        }

        //数字8
        else if(e.getSource() == btn[5])
        {
            String key = "8";
            dataspace.setText(addnum(key));
        }

        //数字9
        else if(e.getSource() == btn[6])
        {
            String key = "9";
            dataspace.setText(addnum(key));
        }

        //数字4
        else if(e.getSource() == btn[8])
        {
            String key = "4";
            dataspace.setText(addnum(key));
        }

        //数字5
        else if(e.getSource() == btn[9])
        {
            String key = "5";
            dataspace.setText(addnum(key));
        }

        //数字6
        else if(e.getSource() == btn[10])
        {
            String key = "6";
            dataspace.setText(addnum(key));
        }

        //数字1
        else if(e.getSource() == btn[12])
        {
            String key = "1";
            dataspace.setText(addnum(key));
        }

        //数字2
        else if(e.getSource() == btn[13])
        {
            String key = "2";
            dataspace.setText(addnum(key));
        }

        //数字3
        else if(e.getSource() == btn[14])
        {
            String key = "3";
            dataspace.setText(addnum(key));
        }

        //数字0
        else if(e.getSource() == btn[17])
        {
            String key = "0";
            dataspace.setText(addnum(key));

        }
    }

    @Override
    public 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));
        }

        //数字7
        else if(keycode == 103 || keycode == 55)
        {
            String key = "7";
            dataspace.setText(addnum(key));
        }

        //数字8
        else if(keycode == 104 || keycode == 56)
        {
            String key = "8";
            dataspace.setText(addnum(key));
        }

        //数字9
        else if(keycode == 105 || (keycode == 57  && !e.isShiftDown()))
        {
            String key = "9";
            dataspace.setText(addnum(key));
        }

        //数字4
        else if(keycode == 100 || keycode == 52)
        {
            String key = "4";
            dataspace.setText(addnum(key));
        }

        //数字5
        else if(keycode == 101 || keycode == 53)
        {
            String key = "5";
            dataspace.setText(addnum(key));
        }

        //数字6
        else if(keycode == 102 || keycode == 54)
        {
            String key = "6";
            dataspace.setText(addnum(key));
        }

        //数字1
        else if(keycode == 97 || keycode == 49)
        {
            String key = "1";
            dataspace.setText(addnum(key));
        }

        //数字2
        else if(keycode == 98 || keycode == 50)
        {
            String key = "2";
            dataspace.setText(addnum(key));
        }

        //数字3
        else if(keycode == 99 || keycode == 51)
        {
            String key = "3";
            dataspace.setText(addnum(key));
        }

        //数字0
        else if(keycode == 96 || (keycode == 48 && !e.isShiftDown()))
        {
            String key = "0";
            dataspace.setText(addnum(key));
        }

        //按下R
        else 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哦,请重新编辑");
            }
        }

        //按下Backspace
                else 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));
                }

    }

    @Override
    public void keyPressed(KeyEvent e) {
        // TODO 自动生成的方法存根

    }
}

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

使用Java实现的简单的计算器

时间: 2025-01-05 19:13:11

使用Java实现的简单的计算器的相关文章

java设计之简单的JAVA计算器

做这个东西主要是为了练习一下以前学习过的java Swing,所以那些复杂的算法就没有加载到里面去........ 先展示一下效果....,额,当然不是这个样子....   ---> 代码: 1 package dialog_color; 2 3 import java.awt.BorderLayout; 4 import java.awt.Color; 5 import java.awt.Container; 6 import java.awt.FlowLayout; 7 import jav

从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器

从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器 之前时间一直在使用Caliburn.Micro这种应用了MVVM模式的WPF框架做开发,是时候总结一下了. Caliburn.Micro(Caliburn.Micro框架概述 - https://blog.csdn.net/lzuacm/article/details/78886436) 是一个轻量级的WPF框架,简化了WPF中的不少用法,推荐做WPF开发时优先使用. 真正快速而熟练地掌握一门技术就可以尝试着用最快的

Java中的简单浮点数类型float和double不能够进行精确运算

在java中,简单的浮点类型float和double是不能够进行运算.我们先看下面的两个程序代码: 代码一: import java.util.Scanner; class Circle { double radius; static final double PI=3.14; public Circle(){this.radius=0;} public Circle(double r){this.radius=r;} public double getArea(){return PI*this

JS实现一个简单的计算器

使用JS完成一个简单的计算器功能.实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除.效果如上: 第一步: 创建构建运算函数count(). 第二步: 获取两个输入框中的值和获取选择框的值. 提示:document.getElementById( id名 ).value 获取或设置 id名的值. 第三步: 获取通过下拉框来选择的值来改变加减乘除的运算法则. 提示:使用switch判断运算法则. 第四步:  通过 = 按钮来调用创建的函数,得到结果. 注意: 使用parseInt

留念 C语言第一课简单的计算器制作

学C语言这么久了.  /* 留念 C语言第一课简单的计算器制作 */ #include<stdio.h>  #include<stdlib.h> #include<conio.h>void displayMenu();void add();void sub();void multiply();void divide();void yushu();void jiecheng();void leijia();void jiechengleijia();int main(in

最简单的计算器脚本

看过老男孩的视频,感触颇深啊,老师的思想真不是一般人可以想到的,来看看老男孩老师的超简单的计算器脚本吧 #!/bin/sh echo $(($1)) 大家都知道$(())中间小括号里面的内容可以被外面括号当作运算来输出,但是知道以上的方式的人有多少呢??? 脚本应用 [[email protected] scripts]# cat 1.sh  #!/bin/sh echo $(($1)) [[email protected] scripts]# sh 1.sh 10*10 100 [[email

利用树莓派实现简单的计算器

在实验板上实现一个简单的计算器,要求在实验板的命令行运行程序,输入两个100以内的数字以及运算符 (+,-,*,/),然后计算结果并在数码管上显示计算结果. 电路设计如下: 实物连接: 代码如下: #include <wiringPi.h> #include <stdio.h> #include <stdlib.h> #define DIGIT1 9 #define DIGIT2 13 #define DIGIT3 12 #define DIGIT4 8 #define

二、Java语言的简单认识及Hello World示例

1. Java语言的简单认识 (1) Java有三个版本: a. JAVA SE (以前称J2SE):Standard Environment 标准版本: b. JAVA EE (以前称J2EE):Enterprise Environment 企业版: c. JAVA ME (以前称J2ME):Eicro Environment 微型版; (2) Java的安装目录 在前一讲中,提到安装目录中有两个文件夹,分别是jdk1.7.0_45和jre7.在"jdk1.7.0_45"文件夹的bi

VS2012中使用MFC制作简单的计算器

用MFC来制作一个简单的计算器,来加深对MFC学习的理解,这个计算器是建立在对话框的基础上,下面来简单介绍下如何制作属于你自己的计算器 1.首先,点击VS2012,启动VS软件,然后建立如下图所示的应用程序,在图的下面输入项目名 2.建立基于对话框的标准程序,如下图所示,其余设置采用系统设置,点击完成 3.如下图,软件会生成下面的对话框,还有相应的库,代码,资源文件等 4.对上面的对话框进行编辑,如下图中所示,最后编辑的样子如下,其中1,5,6是Edit 控件,2,7是静态控件,3是buttio