import javax.swing.*;
import java.awt.*; /**
* 计算器
* @author paul
* 2019.11.25 21:43
* */
public class MyCalculator {
private String str="";//输入输出框内容
private JTextField text_input;//输出框
private JPanel jp_bottomArea;//按钮区域
private String []addsButtonString={"1","2","3","+","4","5","6","-","7","8","9","*",".","0","求根","/","=","取反","AC"};
public MyCalculator(){
//初始化窗体
JFrame frame=new JFrame("计算器");
Container c=frame.getContentPane();
c.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));//设置排布方式为Y轴排列 frame.setLocation(200,300);//设置位置
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); text_input=new JTextField(30);
text_input.setHorizontalAlignment(JTextField.RIGHT);
JPanel jPanel=new JPanel(new GridLayout(1,1,10,10));
jPanel.add(text_input);
c.add(jPanel); GridBagLayout gridBagLayout=new GridBagLayout();
GridBagConstraints cs=new GridBagConstraints();
jp_bottomArea=new JPanel();
jp_bottomArea.setLayout(gridBagLayout);
for(int i=0;i<addsButtonString.length;i++){
if((i+1)%4==0){
cs.gridwidth=GridBagConstraints.REMAINDER;
}else if(addsButtonString[i].equals("=")){
cs.gridwidth=2;
}else {
cs.fill=GridBagConstraints.BOTH;
cs.weightx=1.0;
cs.gridwidth=1;
}
JButton btn = new JButton(addsButtonString[i]);
gridBagLayout.setConstraints(btn,cs);
btn.addActionListener(e -> {
String command = e.getActionCommand();
setShowTextFiledNew(command);
});
jp_bottomArea.add(btn);
}
c.add(jp_bottomArea); frame.pack(); }
/**
* 设置显示内容窗格
* @param command 按钮点击命令
* 如果按下等于,则执行计算
* 如果按下运算符,则格式为 空格+运算符+空格
* 如果按下时数字,则直接拼接
* */
public void setShowTextFiledNew(String command){
if(command.equals("=")){
str=getResult(str);
}else if(command.equals("+")||command.equals("-")||command.equals("*")||command.equals("/")||command.equals("求根")||command.equals("取反")){
str=str+" "+command+" ";
}else if(command.equals("AC")){
str="";
}else {
str=str+command;
}
text_input.setText(str);
}
/**
* 计算
* @param str 需要计算的字符串
* 根据空格进行分割成字符串数组
* 然后判断是哪种类型的运算符并进行计算
* 通过一个result来存放最终结果
* */
public String getResult(String str){
Double result=0.0;
String []need_to_do=str.split(" ");
for(int i=0;i<need_to_do.length;i++){
switch (need_to_do[i]){
case "+":
result=result+(Double.parseDouble(need_to_do[i-1])+Double.parseDouble(need_to_do[i+1]));
break;
case "-":
result=result+(Double.parseDouble(need_to_do[i-1])-Double.parseDouble(need_to_do[i+1]));
break;
case "*":
result=result+(Double.parseDouble(need_to_do[i-1])*Double.parseDouble(need_to_do[i+1]));
break;
case "/":
result=result+(Double.parseDouble(need_to_do[i-1])/Double.parseDouble(need_to_do[i+1]));
break;
case "求根":
result=result+(Math.sqrt(Double.parseDouble(need_to_do[i-1])));
break;
case "取反":
result=result+(-Double.parseDouble(need_to_do[i-1]));
break;
} }
return result+"";
} public static void main(String[] args) {
new MyCalculator();
}
}

界面:

【Java】Swing实现一个简单的计算器的更多相关文章

  1. Java Swing实现一个简单而优美的记事本( 较详细注释 )

    Java Swing实现具有基本功能的记事本 目前实现了: 文件 新建 打开 保存 退出前保存询问 编辑 剪切 复制 粘贴 清除 撤销 格式 字体选择 字体颜色选择 帮助 关于 (样式采用了css与h ...

  2. JS实现一个简单的计算器

    使用JS完成一个简单的计算器功能.实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除.效果如上: 第一步: 创建构建运算函数count(). 第二步: 获取两个输入框中的值和获取选择 ...

  3. Android下实现一个简单的计算器源码

    下面的内容是关于Android下实现一个简单的计算器的内容. import android.app.Activity; import android.os.Bundle;import android. ...

  4. JAVA课程设计——一个简单的教务人事管理系统

    大三上学期期末总结,没错,上学期,写在下学期新学期开始,哈哈哈. 上学期学习了面向对象程序设计,课程设计的题目使用JAVA语言完成一个简单的教务人事管理系统,能够实现访问数据库的登录验证,分别按部门和 ...

  5. 使用JAVA实现的一个简单IOC注入实例

    https://blog.csdn.net/echoshinian100/article/details/77977823 欲登高而望远,勿筑台于流沙 RSS订阅 原 使用JAVA实现的一个简单IOC ...

  6. 使用 jquery 的 上传文件插件 uploadify 3.1 配合 java 来做一个简单的文件上次功能。并且在界面上有radio 的选择内容也要上传

    使用 jquery 的 上传文件插件 uploadify 3.1 配合 java 来做一个简单的文件上次功能.并且在界面上有radio 的选择内容也要上传 uploadify 插件的 下载和文档地址  ...

  7. JS事件 编程练习-自制计算器 使用JS完成一个简单的计算器功能。实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除。

    编程练习 使用JS完成一个简单的计算器功能.实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除. 提示:获取元素的值设置和获取方法为:例:赋值:document.getElement ...

  8. Java RMI 实现一个简单的GFS(谷歌文件系统)——介绍篇

    本系列主要是使用Java RMI实现一个简单的GFS(谷歌文件系统,google file system),首先整体简单介绍下该项目. [为了更好的阅读以及查看其他篇章,请查看原文:https://w ...

  9. Java RMI 实现一个简单的GFS(谷歌文件系统)——背景与设计篇

    目录 背景 系统设计 1. 系统功能 2. Master组件 2.1 命名空间 2.2 心跳机制 2.3 故障恢复和容错机制 3. ChunkServer组件 3.1 本地存储 3.2 内存命中机制 ...

随机推荐

  1. 解决keil5不支持Samsung 2440A等较旧型号Soc的方法

    手上有一块mini2440,最近想拿来跑一下程序.于是去下了最新版的Keil5,结果发现创建工程时没有Samsung一系列型号的CPU选项.   没有办法,去网上找了很久,才发现原因是新版的Keil5 ...

  2. JDK源码之StringBuffer与StringBuilder类分析

    一 概述 StringBuffer类被 final 所修饰,不能被继承,StringBuffer继承了AbstractStringBuilder类, 是一个可变的字符序列,并且类中方法都有synchr ...

  3. Java后端开发工程师是否该转大数据开发?

    撰写我对java后端开发工程师选择方向的想法,写给在java后端选择转方向的人 背景 看到一些java开发工程师,对java后端薪酬太悲观了.认为换去大数据领域就会高工资.觉得java后端没有前途.我 ...

  4. 【Nginx入门系列】第四章 通过域名匹配虚拟主机,不修改端口

    域名访问原理 我们在显示生活中,我们怎样通过一个域名来访问到我们所需要的网站呢? 例如www.baidu.com,我们在浏览器输入百度网址会先发送请求到DNS服务器,DNS会通过我们的域名解析百度对应 ...

  5. Docker(二):理解容器编排工具Kubernetes内部工作原理

    一.Kubernetes是什么 要说到Docker就不得不说说Kubernetes.当Docker容器在微服务的环境下数量一多,那么统一的,自动化的管理自然少不了.而Kubernetes就是一个这样的 ...

  6. K8S部署遇到的问题处理汇总

    第一个: node节点注册提示:failed to get config map: Unauthorized 代码如下: [root@node1 ~]# kubeadm join --token ll ...

  7. 【原创】在 .NET Core 3.1 中使用 Senparc.Weixin.Work 企业微信 SDK —— 发送文本消息

    下面在控制台应用里展示一个简单的例子来实现发送文本消息. 本文目录: 创建控制台应用 添加SDK引用 命令行方式 进入项目目录 添加包引用 配置和使用SDK 添加appsettings.json文件 ...

  8. [REDIS 读书笔记]第一部分 数据结构与对象 跳跃表

    下面是跳跃表的基本原理,REDIS的实现大致相同 跳跃表的一个特点是,插入NODE是通过随机的方式来决定level的,比较奇特 下面是skipList的一个介绍,转载来的,源地址:http://ken ...

  9. 14-Response

    今日知识 1. response 2. ServletContext对象 response * 功能:设置响应消息 1. 设置响应行 1. 格式:HTTP/1.1 200 ok 2. 设置状态码:se ...

  10. TCP加速方式

    使用windows scaling TCP Extensions for High Performance, RFC1323,https://www.ietf.org/rfc/rfc1323.txt ...