java-计算器模板及源码

java-计算器模板及源码java-计算器模板及源码计算器实现了大部分基础功能:基本运算,菜单栏选项,并且拓展了普通型和科学兴选项等等,读者可以在此基础上进行修改和拓展。其他具体实现方法可以看源码,里面有详细的概述,代码框架清晰。读者在阅读和引用过程中,如有问题欢迎评论区留言和私信交流。运行环境:win10EclipseIDEforJavaDevelopers-2020-06下面是计算器的视图:importjava.awt.*;importjava.awt.event.ActionEvent;im

大家好,又见面了,我是你们的朋友全栈君。

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;
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/161566.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • SpringBoot安全线程锁工具类[通俗易懂]

    SpringBoot安全线程锁工具类[通俗易懂]这几日对接物联网项目,前端请求数据,后端接口发起TCP请求,由另一个线程来接收数据,这时候需要阻塞前端发起的请求,直到TCP接收数据完毕,再返回数据给前端。特此写了一个工具类importjava.util.concurrent.ConcurrentHashMap;importjava.util.concurrent.locks.LockSupport;publicclassLockSupportUtil{//存放线程引用的全局容器publicstaticfina

  • 美化ubuntu主题系统

    美化ubuntu主题系统文章目录安装主题选择软件下载主题及加载ubuntu18登录界面更改Docky个人设置效果这里我们给予ubuntu14.04和ubuntu18.4来进行说明安装主题选择软件对于ubuntu18.04来说sudoapt-getinstallgnome-tweeks对于ubuntu14.04来说ubuntu-tweeks和unity-tweak-tool都可以sudoadd-a…

  • Dynamips模拟3660桥接PC后与实际网络通讯问题

    Dynamips模拟3660桥接PC后与实际网络通讯问题

  • pyQt5 时时输出显示(PyCharm QtDesigner PyUIC开发)

    pyQt5 时时输出显示(PyCharm QtDesigner PyUIC开发)用QtDesigner工具进行界面绘制,注意各种插件的命名,以免生成的代码自己都看不懂。绘制好之后,再利用PyUIC把.ui文件转为.py文件。PyCharm可以集成QtDesignerPyUIC这两种工具。func.py:#-*-coding:utf-8-*-#Formimplementationgeneratedfromreadinguifile…

  • 关于SHFileOperation「建议收藏」

    关于SHFileOperation「建议收藏」
    CStringstr=”f://11″;
    FileOp.pFrom = (LPCTSTR)str;
     
    执行不成功,翻了下msdn
    ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.WIN32COM.v10.en/shellcc/platform/shell/reference/structures/shfileopstruct.htm
     pFromAddressofabuffertospecifyon

  • RecyclerView Adapter中notifyDataSetChanged 的作用

    RecyclerView Adapter中notifyDataSetChanged 的作用一直认为notifyDataSetChanged是用来刷新数据的当数据发生变化的时候调用notifyDataSetChanged官方说:通知任何注册的观察者数据发生了改变(Notifyanyregisteredobserversthatthedatasethaschanged)–自己翻译的不保证完全正确。。。。。。今天有空翻阅下源码publicfin…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号