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

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

(0)

相关推荐

  • java图形界面AWT编写计算器

    一.前言 1)这个计算器是基于java语言下图形界面AWT编写的.其实我认为写这个计算器,实现什么功能不重要,市场也不缺这个计算器,而是在于对AWT中三大布局的及画板的使用简单控件的操作使用.通过联系熟悉掌握AWT基础为深入学习打下基础.这个计算器功能也十分简单,空有其表.不过有兴趣的话可以继续添加功能完善操作等. 2)使用平台:主要使用Myeclipse2014 3)主要知识点:java 基础; awt+swing 二.功能实现及代码展示 1)主要是layout布局的练习,对画板文本框的使用,

  • java实现简易计算器功能

    本文为大家分享了java实现简易计算器功能,具体内容如下 题目: 编写一个模拟计算器的程序.在面板中添加一个文本框(显示按键及运算结果). 10个数字按钮(0~9).4个运算按钮(加.减.乘.除).一个等号按钮.一个清除按钮, 要求将按键和结果显示在文本框中. 代码过程展示: import java.awt.Container; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.Action

  • Java swing实现的计算器功能完整实例

    本文实例讲述了Java swing实现的计算器功能.分享给大家供大家参考,具体如下: package awtDemo; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.Vector; public class Calculator { String str1 = "0"; // 运算数1 初值一定为0 为了程序的安全 String str2 = "0"

  • java按钮控件数组实现计算器界面示例分享

    思路如下: 创建一个类,通过extends使其继承窗体类JFrame:创建一个JFrame对象,使用JFrame类的setVisible()方法设置窗体可见:在构造函数中,使用super()方法继承父类的构造方法:使用setTitle()方法设置窗体的标题:使用setBounds()方法设置窗体的显示位置及大小:使用setDefaultCloseOperation()方法设置窗体关闭按钮的动作为退出:使用GridLayout创建网格布局管理器对象:使用GridLayout类的setHgap()方

  • java实现简单的计算器类实例

    本文实例讲述了java实现简单的计算器类.分享给大家供大家参考.具体如下: package chap; import java.awt.BorderLayout; import java.awt.Color; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text

  • 使用jsp调用javabean实现超简单网页计算器示例

    以下是代码: Calculator.java 复制代码 代码如下: package com.amos.model; import java.math.BigDecimal; /** * @ClassName: Calculator * @Description: 计算器 * @author: amosli * @email:amosli@infomorrow.com * @date Mar 20, 2014 1:04:59 AM  */ public class Calculator {    

  • Java简易计算器程序设计

    编写一个模拟计算器的应用程序,使用面板和网格布局, 添加一个文本框,10个数字按钮(0~9),4个加减乘除按钮, 一个等号按钮,一个清除按钮,一个求平方根按钮,一个退格按钮, 要求将计算公式和结果显示在文本框中,实现效果如下图所示. Java简易计算器代码: import javax.swing.*; import javax.swing.JTextField; import java.awt.*; import java.awt.event.*; import java.lang.*; imp

  • Java实现计算器的代码

    用Java 实现的计算器,原理看代码注释,具体内容如下 public class MyCalculator { public static void main(String[] args) { String obj = "6+(8/2)+6/3+1*8 + 30"; ArrayList<String> arrayList = strFormat(obj); System.out.println(obj + "=" + calculator(arrayLi

  • java 简单的计算器程序实例代码

    java 简单的计算器程序 实现实例: import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Calculator { public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { CalculatorFrame frame = new Calculato

  • java模仿windows计算器示例

    这个计算器的界面模仿Windows自带的简易计算器,包括交互界面和和对各种输入的响应.目前尚未实现菜单栏和记忆类按钮的功能 复制代码 代码如下: import java.awt.Color;import java.awt.Container;import java.awt.GridLayout;import java.awt.Insets;import java.awt.event.ActionEvent;import java.awt.event.ActionListener; import

随机推荐