java实现计算器模板及源码

计算器实现了大部分基础功能:基本运算,菜单栏选项,并且拓展了普通型和科学兴选项等等,读者可以在此基础上进行修改和拓展。其他具体实现方法可以看源码,里面有详细的概述,代码框架清晰。
运行环境:win10 Eclipse IDE for Java Developers - 2020-06
下面是计算器的视图:
java实现计算器模板及源码
文章图片

java实现计算器模板及源码
文章图片

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() {@Overridepublic void actionPerformed(ActionEvent e) {boolean flag = false; panel2.setVisible(flag); frame.pack(); }}); m12.addActionListener(new ActionListener() {@Overridepublic 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实现计算器模板及源码】以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    推荐阅读