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;
            }
        }
    }
}

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

相关文章

  • Java多线程并发编程 Volatile关键字

    Java多线程并发编程 Volatile关键字

    volatile 关键字是一个神秘的关键字,也许在 J2EE 上的 JAVA 程序员会了解多一点,但在 Android 上的 JAVA 程序员大多不了解这个关键字。只要稍了解不当就好容易导致一些并发上的错误发生,例如好多人把 volatile 理解成变量的锁
    2017-05-05
  • Java 什么是注解及注解原理详细介绍

    Java 什么是注解及注解原理详细介绍

    这篇文章主要介绍了Java 注解的原理实例详解的相关资料,需要的朋友可以参考下
    2016-12-12
  • Java实现无损Word转PDF的示例代码

    Java实现无损Word转PDF的示例代码

    本文将利用Java中的两个jar包:pdfbox和aspose-words实现无损Word转PDF功能,文中的示例代码讲解详细,感兴趣的小伙伴可以动手尝试一下
    2022-06-06
  • java八大经典书籍 你看过几本?

    java八大经典书籍 你看过几本?

    java八大经典书籍,你看过几本?本文为大家分享了java学习书单,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • SpringBoot详细讲解日志文件

    SpringBoot详细讲解日志文件

    Spring Boot默认使用SLF4J+Logback 记录日志,并提供了默认配置,即使我们不进行任何额外配,也可以使用SLF4J+Logback进行日志输出
    2022-06-06
  • Java实现MD5加密算法方法例子

    Java实现MD5加密算法方法例子

    这篇文章主要给大家介绍了关于Java实现MD5加密算法方法的相关资料,MD5加密是一种常见的加密方式,我们经常用在保存用户密码和关键信息上,需要的朋友可以参考下
    2023-10-10
  • 基于CXF搭建webService的实例讲解

    基于CXF搭建webService的实例讲解

    下面小编就为大家带来一篇基于CXF搭建webService的实例讲解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • java中Date和Timestamp类型的相互转换方式

    java中Date和Timestamp类型的相互转换方式

    这篇文章主要介绍了java中Date和Timestamp类型的相互转换方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • 显示IntelliJ IDEA工具的Run Dashboard功能图文详解

    显示IntelliJ IDEA工具的Run Dashboard功能图文详解

    这篇文章主要介绍了显示IntelliJ IDEA工具的Run Dashboard功能,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • java实现把一个List集合拆分成多个的操作

    java实现把一个List集合拆分成多个的操作

    这篇文章主要介绍了java实现把一个List集合拆分成多个的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08

最新评论