java实现计算器模板及源码

 更新时间:2022年06月06日 17:26:52   作者:原创小白变怪兽  
这篇文章主要为大家详细介绍了java实现计算器模板及源码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

计算器实现了大部分基础功能:基本运算,菜单栏选项,并且拓展了普通型和科学兴选项等等,读者可以在此基础上进行修改和拓展。其他具体实现方法可以看源码,里面有详细的概述,代码框架清晰。

运行环境:win10 Eclipse IDE for Java Developers - 2020-06

下面是计算器的视图:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

/*
 * 计算器
 */
public class CaculatorTest implements ActionListener {
    // 初始框架搭建
    JFrame frame = new JFrame("计算器");
    JTextField area = new JTextField("0");
    JPanel panel1 = new JPanel();
    JPanel panel2 = new JPanel();
    JButton[] buttons = new JButton[20];
    String[] buttonsText = { "sqrt", "退格", "C", "/", "7", "8", "9", "*", "4", "5", "6", "-", "1", "2", "3", "+", "0",
            ".", "+/-", "=" };
    boolean point = false; // 用于判断是否输入多位小数点
    boolean key = true; // 做完运算("=")后继续输入数字
    String sign = " "; // 用于判断和记录运算符号
    double temp = 0; // 多次连续运算时,值的寄存处

    public CaculatorTest() {
        initMenu();
        initText();
        initExtend();
        initFrame();
        initBorderLayout();
    }

    // 初始化菜单
    private void initMenu() {
        JMenuBar mb = new JMenuBar();
        JMenu m1 = new JMenu("选项");
        JMenu m2 = new JMenu("编辑");
        JMenu m3 = new JMenu("帮助");
        JMenuItem m11 = new JMenuItem("普通型计算器");
        JMenuItem m12 = new JMenuItem("科学型计算器");
        m1.add(m11);
        m1.add(m12);
        m11.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                boolean flag = false;
                panel2.setVisible(flag);
                frame.pack();
            }
        });
        m12.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                boolean flag = true;
                panel2.setVisible(flag);
                frame.pack();
            }
        });
        mb.add(m1);
        mb.add(m2);
        mb.add(m3);
        frame.setJMenuBar(mb);
    }

    // 初始化输出文本域
    private void initText() {
        area.setFont(new Font("TimesRoman", Font.PLAIN, 20));
        area.setSize(400, 100);
        area.setHorizontalAlignment(JTextField.RIGHT); // 向右显示
    }

    // 初始化拓展功能
    private void initExtend() {
        panel2.setLayout(new GridLayout(1,4,1,1));
        JButton b1 = new JButton("sin");
        JButton b2 = new JButton("cos");
        JButton b3 = new JButton("exp");
        JButton b4 = new JButton("ln");
        b1.setFont(new Font("TimesRoman", Font.PLAIN, 20));
        b2.setFont(new Font("TimesRoman", Font.PLAIN, 20));
        b3.setFont(new Font("TimesRoman", Font.PLAIN, 20));
        b4.setFont(new Font("TimesRoman", Font.PLAIN, 20));
        b1.setSize(100, 100);
        b1.addActionListener(this);
        b2.setSize(100, 100);
        b2.addActionListener(this);
        b3.setSize(100, 100);
        b3.addActionListener(this);
        b4.setSize(100, 100);
        b4.addActionListener(this);
        panel2.add(b1);
        panel2.add(b2);
        panel2.add(b3);
        panel2.add(b4);
    }

    // 初始化计算器基本界面
    private void initFrame() {
        panel1.setLayout(new GridLayout(5, 4, 1, 1));
        for (int i = 0; i < buttonsText.length; i++) {
            JButton button = new JButton(buttonsText[i]);
            button.setSize(100, 100);
            button.setFont(new Font("TimesRoman", Font.PLAIN, 20));
            button.addActionListener(this);
            panel1.add(button);
        }
    }

    // 初始化计算器总基本界面
    private void initBorderLayout() {
        frame.setLayout(new BorderLayout());
        frame.add(panel1, BorderLayout.SOUTH); // 插入组件
        frame.add(area, BorderLayout.NORTH);
        frame.add(panel2, BorderLayout.CENTER);
        frame.setLocation(700, 400);
        frame.setSize(400, 700);
        frame.setVisible(true); // 设置可见
        panel2.setVisible(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 可以关闭
        frame.pack();
    }

    public static void main(String[] args) {
        new CaculatorTest();
    }

    @Override
    // 事件监听
    public void actionPerformed(ActionEvent e) {
        String str = e.getActionCommand();
        String str2 = area.getText();
        if (str == "0" || str == "1" || str == "2" || str == "3" || str == "4" || str == "5" || str == "6" || str == "7"
                || str == "8" || str == "9") {
            if (key == false) {
                area.setText(str2 + str);
            } else {
                area.setText(str);
                key = false;
            }
        } else if (str == "C") {
            area.setText("0");
            sign = " ";
            key = true;
        } else if (str == ".") {
            if (point == false) {
                area.setText(str2 + str);
                point = true;
            } else {
                area.setText("double poits!press C to update!");
                point = false;
            }
        } else if (str == "+/-") {
            double num = Double.valueOf(str2);
            num = -num;
            area.setText(String.valueOf(num));
        } else if (str == "退格") {
            if (str2.length() == 0) {
                area.setText("can't be deleted!please press C!");
            } else {
                str2 = str2.substring(0, str2.length() - 1);
                area.setText(str2);
            }
        } else if (str == "sqrt") {
            area.setText("");
            sign = "s";
        } else if (str == "sin") {
            area.setText("");
            sign = "sin";
        } else if (str == "cos") {
            area.setText("");
            sign = "cos";
        } else if (str == "exp") {
            area.setText("");
            sign = "exp";
        } else if (str == "ln") {
            area.setText("");
            sign = "ln";
        } else {
            if (str == "+") {
                if (sign == " ") {
                    sign = "+";
                    temp = Double.valueOf(str2);
                    area.setText("");
                } else if (sign == "-") {
                    if (str2.length() == 0) {
                        sign = "+";
                    } else {
                        temp = temp - Double.valueOf(str2);
                        sign = "+";
                        area.setText("");
                        key = true;
                    }
                } else if (sign == "+") {
                    if (str2.length() == 0) {
                        sign = "+";
                    } else {
                        temp = temp + Double.valueOf(str2);
                        sign = "+";
                        area.setText("");
                        key = true;
                    }
                } else if (sign == "*") {
                    if (str2.length() == 0) {
                        sign = "+";
                    } else {
                        temp = temp * Double.valueOf(str2);
                        sign = "+";
                        area.setText("");
                        key = true;
                    }
                } else if (sign == "/") {
                    if (str2.length() == 0) {
                        sign = "+";
                    } else if (Double.valueOf(str2) == 0) {
                        area.setText("除数不能为0哦!按 C");
                    } else {
                        temp = temp / Double.valueOf(str2);
                        area.setText("");
                        sign = "+";
                        key = true;
                    }
                } else if (sign == "s") {
                    if (str2.length() == 0) {
                        sign = "+";
                    } else {
                        temp = Math.sqrt(Double.valueOf(str2));
                        area.setText("");
                        sign = "+";
                    }
                } else if (sign == "sin") {
                    if (str2.length() == 0) {
                        sign = "+";
                    } else {
                        temp = Math.sin(Double.valueOf(str2));
                        area.setText("");
                        sign = "+";
                    }
                } else if (sign == "cos") {
                    if (str2.length() == 0) {
                        sign = "+";
                    } else {
                        temp = Math.cos(Double.valueOf(str2));
                        area.setText("");
                        sign = "+";
                    }
                } else if (sign == "exp") {
                    if (str2.length() == 0) {
                        sign = "+";
                    } else {
                        temp = Math.exp(Double.valueOf(str2));
                        area.setText("");
                        sign = "+";
                    }
                } else if (sign == "ln") {
                    if (str2.length() == 0) {
                        sign = "+";
                    } else {
                        temp = Math.log(Double.valueOf(str2));
                        area.setText("");
                        sign = "+";
                    }
                }
            } else if (str == "-") {
                if (sign == " ") {
                    sign = "-";
                    temp = Double.valueOf(str2);
                    area.setText("");
                } else if (sign == "-") {
                    if (str2.length() == 0) {
                        sign = "-";
                    } else {
                        temp = temp - Double.valueOf(str2);
                        sign = "-";
                        area.setText("");
                        key = true;
                    }
                } else if (sign == "+") {
                    if (str2.length() == 0) {
                        sign = "-";
                    } else {
                        temp = temp + Double.valueOf(str2);
                        sign = "-";
                        area.setText("");
                        key = true;
                    }
                } else if (sign == "*") {
                    if (str2.length() == 0) {
                        sign = "-";
                    } else {
                        temp = temp * Double.valueOf(str2);
                        sign = "-";
                        area.setText("");
                        key = true;
                    }
                } else if (sign == "/") {
                    if (str2.length() == 0) {
                        sign = "-";
                    } else if (Double.valueOf(str2) == 0) {
                        area.setText("除数不能为0哦!按 C");
                    } else {
                        temp = temp / Double.valueOf(str2);
                        area.setText("");
                        sign = "-";
                        key = true;
                    }
                } else if (sign == "s") {
                    if (str2.length() == 0) {
                        sign = "-";
                    } else {
                        temp = Math.sqrt(Double.valueOf(str2));
                        area.setText("");
                        sign = "-";
                    }
                } else if (sign == "sin") {
                    if (str2.length() == 0) {
                        sign = "-";
                    } else {
                        temp = Math.sin(Double.valueOf(str2));
                        area.setText("");
                        sign = "-";
                    }
                } else if (sign == "cos") {
                    if (str2.length() == 0) {
                        sign = "-";
                    } else {
                        temp = Math.cos(Double.valueOf(str2));
                        area.setText("");
                        sign = "-";
                    }
                } else if (sign == "exp") {
                    if (str2.length() == 0) {
                        sign = "-";
                    } else {
                        temp = Math.exp(Double.valueOf(str2));
                        area.setText("");
                        sign = "-";
                    }
                } else if (sign == "ln") {
                    if (str2.length() == 0) {
                        sign = "-";
                    } else {
                        temp = Math.log(Double.valueOf(str2));
                        area.setText("");
                        sign = "-";
                    }
                }
            } else if (str == "*") {
                if (sign == " ") {
                    sign = "*";
                    temp = Double.valueOf(str2);
                    area.setText("");
                } else if (sign == "-") {
                    if (str2.length() == 0) {
                        sign = "*";
                    } else {
                        temp = temp - Double.valueOf(str2);
                        sign = "*";
                        area.setText("");
                        key = true;
                    }
                } else if (sign == "+") {
                    if (str2.length() == 0) {
                        sign = "*";
                    } else {
                        temp = temp + Double.valueOf(str2);
                        sign = "*";
                        area.setText("");
                        key = true;
                    }
                } else if (sign == "*") {
                    if (str2.length() == 0) {
                        sign = "*";
                    } else {
                        temp = temp * Double.valueOf(str2);
                        sign = "*";
                        area.setText("");
                        key = true;
                    }
                } else if (sign == "/") {
                    if (str2.length() == 0) {
                        sign = "*";
                    } else if (Double.valueOf(str2) == 0) {
                        area.setText("除数不能为0哦!按 C");
                    } else {
                        temp = temp / Double.valueOf(str2);
                        area.setText("");
                        sign = "*";
                        key = true;
                    }
                } else if (sign == "s") {
                    if (str2.length() == 0) {
                        sign = "*";
                    } else {
                        temp = Math.sqrt(Double.valueOf(str2));
                        area.setText("");
                        sign = "*";
                    }
                } else if (sign == "sin") {
                    if (str2.length() == 0) {
                        sign = "*";
                    } else {
                        temp = Math.sin(Double.valueOf(str2));
                        area.setText("");
                        sign = "*";
                    }
                } else if (sign == "cos") {
                    if (str2.length() == 0) {
                        sign = "*";
                    } else {
                        temp = Math.cos(Double.valueOf(str2));
                        area.setText("");
                        sign = "*";
                    }
                } else if (sign == "exp") {
                    if (str2.length() == 0) {
                        sign = "*";
                    } else {
                        temp = Math.exp(Double.valueOf(str2));
                        area.setText("");
                        sign = "*";
                    }
                } else if (sign == "ln") {
                    if (str2.length() == 0) {
                        sign = "*";
                    } else {
                        temp = Math.log(Double.valueOf(str2));
                        area.setText("");
                        sign = "*";
                    }
                }
            } else if (str == "/") {
                if (sign == " ") {
                    sign = "/";
                    temp = Double.valueOf(str2);
                    area.setText("");
                } else if (sign == "-") {
                    if (str2.length() == 0) {
                        sign = "/";
                    } else {
                        temp = temp - Double.valueOf(str2);
                        sign = "/";
                        area.setText("");
                        key = true;
                    }
                } else if (sign == "+") {
                    if (str2.length() == 0) {
                        sign = "/";
                    } else {
                        temp = temp + Double.valueOf(str2);
                        sign = "/";
                        area.setText("");
                        key = true;
                    }
                } else if (sign == "*") {
                    if (str2.length() == 0) {
                        sign = "/";
                    } else {
                        temp = temp * Double.valueOf(str2);
                        sign = "/";
                        area.setText("");
                        key = true;
                    }
                } else if (sign == "/") {
                    if (str2.length() == 0) {
                        sign = "/";
                    } else if (Double.valueOf(str2) == 0) {
                        area.setText("除数不能为0哦!按 C");
                    } else {
                        temp = temp / Double.valueOf(str2);
                        area.setText("");
                        sign = "/";
                        key = true;
                    }
                } else if (sign == "s") {
                    if (str2.length() == 0) {
                        sign = "/";
                    } else {
                        temp = Math.sqrt(Double.valueOf(str2));
                        area.setText("");
                        sign = "/";
                    }
                } else if (sign == "sin") {
                    if (str2.length() == 0) {
                        sign = "/";
                    } else {
                        temp = Math.sin(Double.valueOf(str2));
                        area.setText("");
                        sign = "/";
                    }
                } else if (sign == "cos") {
                    if (str2.length() == 0) {
                        sign = "/";
                    } else {
                        temp = Math.cos(Double.valueOf(str2));
                        area.setText("");
                        sign = "/";
                    }
                } else if (sign == "exp") {
                    if (str2.length() == 0) {
                        sign = "/";
                    } else {
                        temp = Math.exp(Double.valueOf(str2));
                        area.setText("");
                        sign = "/";
                    }
                } else if (sign == "ln") {
                    if (str2.length() == 0) {
                        sign = "/";
                    } else {
                        temp = Math.log(Double.valueOf(str2));
                        area.setText("");
                        sign = "/";
                    }
                }
            } else if (str == "=") {
                if (sign == "+") {
                    if (str2.length() == 0) {
                        area.setText(String.valueOf(temp));
                        sign = " ";
                    } else {
                        temp = temp + Double.valueOf(str2);
                        area.setText(String.valueOf(temp));
                        sign = " ";
                    }
                } else if (sign == "-") {
                    if (str2.length() == 0) {
                        area.setText(String.valueOf(temp));
                        sign = " ";
                    } else {
                        temp = temp - Double.valueOf(str2);
                        area.setText(String.valueOf(temp));
                        sign = " ";
                    }
                } else if (sign == "*") {
                    if (str2.length() == 0) {
                        area.setText(String.valueOf(temp));
                        sign = " ";
                    } else {
                        temp = temp * Double.valueOf(str2);
                        area.setText(String.valueOf(temp));
                        sign = " ";
                    }
                } else if (sign == "/") {
                    if (Double.valueOf(str2) == 0) {
                        area.setText("除数不能为0哦!按C");
                        sign = " ";
                    } else {
                        temp = temp / Double.valueOf(str2);
                        area.setText(String.valueOf(temp));
                        sign = " ";
                    }
                } else if (sign == " ") {
                    if (str2.length() == 0) {
                        area.setText(String.valueOf(temp));
                    } else {
                        temp = Double.valueOf(str2);
                        area.setText(String.valueOf(temp));
                    }
                } else if (sign == "s") {
                    temp = Math.sqrt(Double.valueOf(str2));
                    area.setText(String.valueOf(temp));
                    sign = " ";
                } else if (sign == "sin") {
                    temp = Math.sin(Double.valueOf(str2));
                    area.setText(String.valueOf(temp));
                    sign = " ";
                } else if (sign == "cos") {
                    temp = Math.cos(Double.valueOf(str2));
                    area.setText(String.valueOf(temp));
                    sign = " ";
                } else if (sign == "exp") {
                    temp = Math.exp(Double.valueOf(str2));
                    area.setText(String.valueOf(temp));
                    sign = " ";
                } else if (sign == "ln") {
                    temp = Math.log(Double.valueOf(str2));
                    area.setText(String.valueOf(temp));
                    sign = " ";
                }
                key = true;
            }
        }
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Mybatis中的Criteria条件查询方式

    Mybatis中的Criteria条件查询方式

    这篇文章主要介绍了Mybatis中的Criteria条件查询方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java异常处理的12条军规总结

    Java异常处理的12条军规总结

    这篇文章主要给大家介绍了关于Java异常处理的12条军规,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • 详解SpringBoot 发布ApplicationEventPublisher和监听ApplicationEvent事件

    详解SpringBoot 发布ApplicationEventPublisher和监听ApplicationEvent事

    这篇文章主要介绍了详解SpringBoot 发布ApplicationEventPublisher和监听ApplicationEvent事件,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06
  • Java中Spring技巧之扩展点的应用

    Java中Spring技巧之扩展点的应用

    这篇文章主要介绍了Java中Spring技巧之扩展点的应用,下文Spring容器的启动流程图展开其内容的相关资料,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-04-04
  • 配置DispatcherServlet的方法介绍

    配置DispatcherServlet的方法介绍

    今天小编就为大家分享一篇关于配置DispatcherServlet的方法介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • java中删除文件/文件夹的3种方法示例小结

    java中删除文件/文件夹的3种方法示例小结

    这篇文章主要介绍了java中删除文件/文件夹的3种方法示例小结,第一种是通过io删除文件,第二种是通过Files.walk删除文件,第三种是通过 Files.walkFileTree删除文件,本文结合示例代码给大家介绍的非常详细,需要的朋友参考下吧
    2023-10-10
  • Spring batch批处理框架

    Spring batch批处理框架

    本文主要介绍了Spring batch批处理框架的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-04-04
  • Java实现AOP代理的三种方式详解

    Java实现AOP代理的三种方式详解

    AOP是一种设计思想,是软件设计领域中的面向切面编程,它是面向对象编程的一种补充和完善。本文将用Java实现AOP代理的三种方式,需要的可以参考一下
    2022-07-07
  • Java唯一订单编号生成代码例子

    Java唯一订单编号生成代码例子

    在项目中,我们经常遇到需要生成订单编号、字典编号等唯一值场景,下面这篇文章主要给大家介绍了关于Java唯一订单编号生成的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-07-07
  • 深入理解spring boot 监控

    深入理解spring boot 监控

    今天通过本文给大家介绍关于spring boot 监控的相关知识,引入jar包的实例代码文中也给大家详细介绍,对spring boot 监控相关知识感兴趣的朋友一起看看吧
    2021-10-10

最新评论