📄 handler.java
字号:
package controller;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import view.Compute;
public class Handler implements ActionListener{
private Compute com;
private String re;
public Handler(Compute com,String re){
this.com=com;
this.re=re;
}
public void actionPerformed(ActionEvent e){
//所有数字键监听实现
if(!(re.equals("+")||re.equals("-")||re.equals("*")
||re.equals("/")||re.equals(".")||re.equals("=")||re.equals("C"))){
String text=com.getFd().getText();
double num=Double.parseDouble(text);
if(num==0&&!com.isPointFlag()||com.isOpFlag()){
com.getFd().setText(re+".");
}else if(text.endsWith(".")&&!com.isPointFlag()){
com.getFd().setText(text.substring(0, text.length()-1)+re+".");
}else if(text.endsWith(".")&&com.isPointFlag()){
com.getFd().setText(com.getFd().getText()+re);
}else{
com.getFd().setText(text+re);
}
// com.setPointFlag(false);
com.setOpFlag(false);
}
//小数点键监听实现
if(re.equals(".")){
com.setPointFlag(true);//设置刚点过.运算符标记为true
com.setOpFlag(false);//设置刚点过运算符标记为false
}
//清空键监听实现
if(re.equals("C")){
com.setPointFlag(false);
com.getFd().setText("0.");
com.setOpchar('!');
com.setOpnum(0);
com.setOpFlag(false);
}
//"="号监听器
double temp=0;
if(re.equals("=")){//判断是否+号并且不是刚点过+号
if(com.getOpchar()!='!'){//判断是否第一次点击运算符
switch(com.getOpchar()){//得到以前点击的运算符,来决定做什么运算
case '+':
temp=com.getOpnum()+Double.parseDouble(com.getFd().getText());
com.setText(temp);
break;
case '-':
com.setText(
com.getOpnum()-Double.parseDouble(com.getFd().getText()));
break;
case '*':
com.setText(
com.getOpnum()*Double.parseDouble(com.getFd().getText()));
break;
case '/':
com.setText(
com.getOpnum()/Double.parseDouble(com.getFd().getText()));
break;
}
com.setOpnum(temp);//记录运算结果到第一个操作数
}else{
com.setOpnum(Double.parseDouble(com.getFd().getText()));
}
// com.setOpchar(com.getOpchar());//设置点过+运算符
com.setOpFlag(true);//设置刚点过运算符标记为true
com.setPointFlag(false);//设置刚点过.运算符标记为false;
}
//运算符键监听实现
if(re.equals("+")){//判断是否+号并且不是刚点过+号
if(com.getOpchar()!='!'&&!com.isOpFlag()){//判断是否第一次点击运算符
switch(com.getOpchar()){//得到以前点击的运算符,来决定做什么运算
case '+':
temp=com.getOpnum()+Double.parseDouble(com.getFd().getText());
com.setText(temp);
break;
case '-':
com.setText(
com.getOpnum()-Double.parseDouble(com.getFd().getText()));
break;
case '*':
com.setText(
com.getOpnum()*Double.parseDouble(com.getFd().getText()));
break;
case '/':
com.setText(
com.getOpnum()/Double.parseDouble(com.getFd().getText()));
break;
}
com.setOpnum(temp);//记录运算结果到第一个操作数
}else{
com.setOpnum(Double.parseDouble(com.getFd().getText()));
}
com.setOpchar('+');//设置点过+运算符
com.setOpFlag(true);//设置刚点过运算符标记为true
com.setPointFlag(false);//设置刚点过.运算符标记为false;
}
if(re.equals("-")){//判断是否+号并且不是刚点过+号
if(com.getOpchar()!='!'&&!com.isOpFlag()){//判断是否第一次点击运算符
switch(com.getOpchar()){//得到以前点击的运算符,来决定做什么运算
case '+':
temp=com.getOpnum()+Double.parseDouble(com.getFd().getText());
com.setText(temp);
break;
case '-':
com.setText(
com.getOpnum()-Double.parseDouble(com.getFd().getText()));
break;
case '*':
com.setText(
com.getOpnum()*Double.parseDouble(com.getFd().getText()));
break;
case '/':
com.setText(
com.getOpnum()/Double.parseDouble(com.getFd().getText()));
break;
}
com.setOpnum(temp);//记录运算结果到第一个操作数
}else{
com.setOpnum(Double.parseDouble(com.getFd().getText()));
}
com.setOpchar('-');//设置点过+运算符
com.setOpFlag(true);//设置刚点过运算符标记为true
com.setPointFlag(false);//设置刚点过.运算符标记为false;
}
if(re.equals("*")){//判断是否+号并且不是刚点过+号
if(com.getOpchar()!='!'&&!com.isOpFlag()){//判断是否第一次点击运算符
switch(com.getOpchar()){//得到以前点击的运算符,来决定做什么运算
case '+':
temp=com.getOpnum()+Double.parseDouble(com.getFd().getText());
com.setText(temp);
break;
case '-':
com.setText(
com.getOpnum()-Double.parseDouble(com.getFd().getText()));
break;
case '*':
com.setText(
com.getOpnum()*Double.parseDouble(com.getFd().getText()));
break;
case '/':
com.setText(
com.getOpnum()/Double.parseDouble(com.getFd().getText()));
break;
}
com.setOpnum(temp);//记录运算结果到第一个操作数
}else{
com.setOpnum(Double.parseDouble(com.getFd().getText()));
}
com.setOpchar('*');//设置点过+运算符
com.setOpFlag(true);//设置刚点过运算符标记为true
com.setPointFlag(false);//设置刚点过.运算符标记为false;
}
if(re.equals("/")){//判断是否+号并且不是刚点过+号
if(com.getOpchar()!='!'&&!com.isOpFlag()){//判断是否第一次点击运算符
switch(com.getOpchar()){//得到以前点击的运算符,来决定做什么运算
case '+':
temp=com.getOpnum()+Double.parseDouble(com.getFd().getText());
com.setText(temp);
break;
case '-':
com.setText(
com.getOpnum()-Double.parseDouble(com.getFd().getText()));
break;
case '*':
com.setText(
com.getOpnum()*Double.parseDouble(com.getFd().getText()));
break;
case '/':
com.setText(
com.getOpnum()/Double.parseDouble(com.getFd().getText()));
break;
}
com.setOpnum(temp);//记录运算结果到第一个操作数
}else{
com.setOpnum(Double.parseDouble(com.getFd().getText()));
}
com.setOpchar('/');//设置点过+运算符
com.setOpFlag(true);//设置刚点过运算符标记为true
com.setPointFlag(false);//设置刚点过.运算符标记为false;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -