⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calculatecontroller.java

📁 用java编写的实现计算器的众多功能 方便实用
💻 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 + -