java实现计算器模板及源码

网友投稿 338 2022-07-26


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

运行环境: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; // 做完运算("=WmVvbjM")后继续输入数字

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)WmVvbjM {

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;

}

}

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:mybatis中&lt;choose&gt;标签的用法说明
下一篇:Springboot与vue实例讲解实现前后端分离的人事管理系统
相关文章

 发表评论

暂时没有评论,来抢沙发吧~