📄 calculatecontroller.java
字号:
package lab5;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
public class CalculateController implements ActionListener {
boolean digInputListener = false;
double data = 0;
String digStr = "";
String curStr = "";
CalculatorView calView = null;
Calculate cal = null;
CalculateState curCalState = null;
public static HashMap<String, Operator> operatorMap;
{
operatorMap = new HashMap<String, Operator>();
for (Operator p : Operator.values()) {
String str = p.toString();
operatorMap.put(str, p);
}
}
public CalculateController() {
}
public void setCalculate(Calculate c) {
cal = c;
curCalState = new InitCalculateState(this, cal);
}
public void addCalculateView(CalculatorView view) {
calView = view;
}
public Calculate getCalculate() {
return cal;
}
private void startDigInputListener() {
digInputListener = true;
data = 0;
digStr = "";
}
private void endDigInputListener() {
try {
digInputListener = false;
data = Double.parseDouble(digStr);
} catch (NumberFormatException e) {
cal.clear();
cal.setResult(0.0);
}
}
private void digInputListener(char d) {
digStr += d;
curStr = digStr;
cal.SetCurStr(digStr);
}
public void changeState(CalculateState newState) {
curCalState = newState;
}
public void actionPerformed(ActionEvent e) {
String str = e.getActionCommand();
char firstChar = str.charAt(0);
if ((firstChar <= '9' && firstChar >= '0') || firstChar == '.') {
if (digInputListener == false) {
startDigInputListener();
}
digInputListener(firstChar);
} else {
if (digInputListener == true) {
endDigInputListener();
curCalState.inputD(data);
}
Operator op = operatorMap.get(str);
passMessage(op);
}
}
private void passMessage(Operator op){
switch (op) {
case ADD:
case SUB:
case MUL:
case DIV:
curCalState.inputB(op);
break;
case COS:
case SIN:
case TAN:
curCalState.inputU(op);
break;
case ASSIGN:
curCalState.inputA();
break;
case CE:
curCalState.inputCE();
break;
case MR:
curCalState.inputMR();
break;
case M:
curCalState.inputM();
break;
case MC:
curCalState.inputMC();
break;
case MS:
curCalState.inputMS();
break;
}
}
public CalculatorView getCalculatorView() {
return calView;
}
public static void main(String[] args) {
CalculateController calController = new CalculateController();
CalculatorView mainView = new CalculatorView("Calculator",
calController);
Calculate cal = new Calculate(mainView);
calController.setCalculate(cal);
calController.addCalculateView(mainView);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -