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. [白话解析] 带你一起梳理Word2vec相关概念

    [白话解析] 带你一起梳理Word2vec相关概念 0x00 摘要 本文将尽量使用易懂的方式,尽可能不涉及数学公式,而是从整体的思路上来说,运用感性直觉的思考来帮大家梳理Word2vec相关概念. 0 ...

  2. react脚手架搭建命令 react常用库

    react项目一般需要的组件库     react-redux     状态管理库     react-router-dom    路由     sass /less     style-compon ...

  3. 吐血推荐珍藏的IDEA插件

    之前给大家推荐了一些我自己常用的VS Code插件,很多同学表示很受用,并私信我说要再推荐一些IDEA插件.作为一名职业Java程序员/业余js开发者,我平时还是用IDEA比较多,所以也确实珍藏了一些 ...

  4. 深入解读大厂java面试必考基本功-HashMap集合

    课程简介 HashMap集合在企业开发中是必用的集合同时也是面试官面试率很高的集合,因为HashMap里面涉及了很多的知识点,可以比较全面考察面试者的基本功,想要拿到一个好offer,这是一个迈不过的 ...

  5. 深入理解JVM-类加载及类加载器

    深入理解JVM 2020年02月06日22:43:09 - 记录学习过程 终于开始了.在学习这个之前,看了zhanglong老师的 java 8 和springboot 迫不及待了.先开始吧. 写在前 ...

  6. Codeforces_818

    A.winners总数为(k+1)diplomas. #include<bits/stdc++.h> using namespace std; long long n,k; int mai ...

  7. shell命令之一天一见:awk

    AWK是一种优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一. 这种编程及数据操作语言(其名称得自于它的创始人阿尔佛雷德·艾侯.彼得·溫伯格和布萊恩·柯林漢姓氏的首个字 ...

  8. Codeforces_723_B

    http://codeforces.com/problemset/problem/723/B 求括号内单词数和括号外最大单词长度,注意细心,尤其是ok和sum的置0. #include<iost ...

  9. Go语言实现:【剑指offer】剪绳子

    该题目来源于牛客网<剑指offer>专题. 给你一根长度为n的绳子,请把绳子剪成整数长的m段(m.n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],-,k[ ...

  10. Java 中序列化与反序列化

    一. 序列化和反序列化概念 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.将程序中的对象,放入文 ...