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();
}
}

界面:

最新文章

  1. C#固定时间执行指定事件(观察者模式+异步委托)
  2. 【总结】总结写了3个React页面后遇到的各种坑
  3. servlet 学习(一)
  4. win7 备份错误解决
  5. gridControl控件动态绑定列
  6. PHP文件包含漏洞剖析
  7. 161103、Spring Boot 入门
  8. 在手机网页中使用USEMAP
  9. FineUI表格模板列Undefined问题
  10. (一)Hololens Unity 开发环境搭建(Mac BOOTCAMP WIN10)
  11. CentOS下WDCP下的MYSQL开启远程连接
  12. 如何在centos7上安装源码包
  13. seq2seq-chatbot:200 行代码实现聊天机器人
  14. 算法与数据结构(四) 图的物理存储结构与深搜、广搜(Swift版)
  15. hdu-5786(补图最短路)
  16. ie清理缓存
  17. Java就业班 mysql02
  18. shell脚本简介
  19. Linux系统IO分析工具之iotstat常用参数介绍
  20. Series 入门(创建和增删改查)

热门文章

  1. STVP编译时遇到no default placement for segment .FLASH_CODE
  2. spring cloud oauth2+JWT整合使用token返回JWT Cannot convert access token to JSON解决办法
  3. jdk8中CompletableFuture的各个API用法,极大扩展了Future
  4. springboot-mybatis配置问题
  5. 自学Java第三章——《流程控制语句结构》
  6. Android 开启与关闭软键盘
  7. Luogu P1330 封锁阳光大学 (黑白染色)
  8. Linux系统之网络文件共享与数据实时同步实践
  9. num11---桥接模式
  10. Mysql设置创建时间字段和更新时间字段自动获取时间,填充时间