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. android开发实战-记账本APP(二)

    继昨天的开发,继续完成今天的内容. (一)开始构建一些业务逻辑,开始构建记账本的添加一笔记账的功能. ①对fab按钮的click时间进行修改,创建一个AlertDialog.Builder对象,因此我 ...

  2. STVP编译时遇到no default placement for segment .FLASH_CODE

    最近编译STM8S003时需要使用flash库函数,看起来简单,实则折腾了超过1天.今天总结方法如下: 1.修改stm8s.h 156行  #define RAM_EXECUTION  注释去掉  如 ...

  3. Linux学习笔记-配置阿里云yum源

    进入目录:cd /etc/yum.repos.d 备份:mkdir repobak mv *.repo repobak/ 下载CentOS-Base.repo 到路径/etc/yum.repos.d/ ...

  4. 死磕java(7)

    http://www.cnblogs.com/liunanjava/p/4296045.html 自己写的例子 package com.sougn.trynew; public abstract cl ...

  5. 从数组中找到topK的元素(序号)

    问题: 在n个数中找出最大的k个数. 多次求min()或求max() 最简单的方法是对大小为k的数组进行n次求min计算(或者对大小为n的数组进行k次求max计算)最后能够找出最大k个数.复杂度是O( ...

  6. 第一次安装android studio遇到的问题

    安装android studio一点都不顺利,最后总是成功安装,但是忘了把问题记录下来,下一次肯定还肯能出现问题 忘了把问题记录下来了,好像是sync failed 第一次安装3.1.4遇到的问题,好 ...

  7. pdo数据操作,3-4,0724

    require 'connect.php'; $linshi = $dbh->prepare('UPDATE `category` SET `name` = :name, `alias`=:al ...

  8. 【原创】为什么Mongodb索引用B树,而Mysql用B+树?

    引言 好久没写文章了,今天回来重操旧业.毕竟现在对后端开发的要求越来越高,大家要做好各种准备. 因此,大家有可能遇到如下问题 为什么Mysql中Innodb的索引结构采取B+树? 回答这个问题时,给自 ...

  9. java9循环结构进阶

    public class jh_01_循环嵌套 { public static void main(String[] args) { // for(int i = 1;i<= 5;i++) { ...

  10. 数据算法 --hadoop/spark数据处理技巧 --(1.二次排序问题 2. TopN问题)

    一.二次排序问题. MR/hadoop两种方案: 1.让reducer读取和缓存给个定键的所有值(例如,缓存到一个数组数据结构中,)然后对这些值完成一个reducer中排序.这种方法不具有可伸缩性,因 ...