【Java】Swing实现一个简单的计算器
2024-09-06 18:51:51
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();
}
}
界面:
最新文章
- C#固定时间执行指定事件(观察者模式+异步委托)
- 【总结】总结写了3个React页面后遇到的各种坑
- servlet 学习(一)
- win7 备份错误解决
- gridControl控件动态绑定列
- PHP文件包含漏洞剖析
- 161103、Spring Boot 入门
- 在手机网页中使用USEMAP
- FineUI表格模板列Undefined问题
- (一)Hololens Unity 开发环境搭建(Mac BOOTCAMP WIN10)
- CentOS下WDCP下的MYSQL开启远程连接
- 如何在centos7上安装源码包
- seq2seq-chatbot:200 行代码实现聊天机器人
- 算法与数据结构(四) 图的物理存储结构与深搜、广搜(Swift版)
- hdu-5786(补图最短路)
- ie清理缓存
- Java就业班 mysql02
- shell脚本简介
- Linux系统IO分析工具之iotstat常用参数介绍
- Series 入门(创建和增删改查)
热门文章
- STVP编译时遇到no default placement for segment .FLASH_CODE
- spring cloud oauth2+JWT整合使用token返回JWT Cannot convert access token to JSON解决办法
- jdk8中CompletableFuture的各个API用法,极大扩展了Future
- springboot-mybatis配置问题
- 自学Java第三章——《流程控制语句结构》
- Android 开启与关闭软键盘
- Luogu P1330 封锁阳光大学 (黑白染色)
- Linux系统之网络文件共享与数据实时同步实践
- num11---桥接模式
- Mysql设置创建时间字段和更新时间字段自动获取时间,填充时间