备份一下很久之前写的计算器的源代码。
待完善。
// CalculateGUI.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CalculateGUI extends JFrame implements ActionListener{
JButton zero, one, two, three, four, five, six, seven,eight, nine;
JButton point, add, sub, mul, div, equalTo, sqrt;
JButton mc, madd, msub, mr;
JButton delete, CE, C;
JTextField text;
JPanel panel;
Operation op;
String num = "", operator = "";
String result = "", mresult = "";
public CalculateGUI(){
super("计算器");
zero = new JButton("0");
one = new JButton("1");
two = new JButton("2");
three = new JButton("3");
four = new JButton("4");
five = new JButton("5");
six = new JButton("6");
seven = new JButton("7");
eight = new JButton("8");
nine = new JButton("9");
point = new JButton(".");
add = new JButton("+");
sub = new JButton("-");
mul = new JButton("*");
div = new JButton("/");
equalTo = new JButton("=");
sqrt = new JButton("√");
delete = new JButton("←");
CE = new JButton("CE");
C = new JButton("C");
mc = new JButton("mc");
madd = new JButton("m+");
msub = new JButton("m-");
mr = new JButton("mr");
text = new JTextField();
text.setFont(new Font("宋体",Font.BOLD, 25));
text.setHorizontalAlignment(SwingConstants.RIGHT);
text.setColumns(2);
panel = new JPanel();
panel.add(mc);
panel.add(madd);
panel.add(msub);
panel.add(mr);
panel.add(delete);
panel.add(CE);
panel.add(C);
panel.add(sqrt);
panel.add(seven);
panel.add(eight);
panel.add(nine);
panel.add(div);
panel.add(four);
panel.add(five);
panel.add(six);
panel.add(mul);
panel.add(one);
panel.add(two);
panel.add(three);
panel.add(sub);
panel.add(zero);
panel.add(point);
panel.add(add);
panel.add(equalTo);
panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
panel.setLayout(new GridLayout(6, 5, 5, 5));
this.setLayout(new BorderLayout());
this.add(text, BorderLayout.NORTH);
this.add(panel);
zero.addActionListener(this);
one.addActionListener(this);
two.addActionListener(this);
three.addActionListener(this);
four.addActionListener(this);
five.addActionListener(this);
six.addActionListener(this);
seven.addActionListener(this);
eight.addActionListener(this);
nine.addActionListener(this);
point.addActionListener(this);
add.addActionListener(this);
sub.addActionListener(this);
mul.addActionListener(this);
div.addActionListener(this);
equalTo.addActionListener(this);
sqrt.addActionListener(this);
delete.addActionListener(this);
CE.addActionListener(this);
C.addActionListener(this);
mc.addActionListener(this);
madd.addActionListener(this);
msub.addActionListener(this);
mr.addActionListener(this);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocation(100, 200);
this.setSize(270, 300);
this.setVisible(true);
}
public String getResult(){
if(operator.equals("/") && num.equals("0"))
text.setText("错误,除数不能为0");
else if(operator.length() != 0 && num.length() == 0)
text.setText("未输入第二个操作数");
/* ↑出错 求解↓ */
else if(operator.length() == 0 && num.length() != 0)
result = num;
else if(operator.equals("√")){
result = String.valueOf(Math.sqrt(Double.parseDouble(num)));
if(result.length()>15) result = result.substring(0, 15);
}
else{
op.setB(Double.parseDouble(num));
result = String.valueOf(op.getResult());
}
num = "";
operator = "";
return result;
}
//←
public void delete(){
if(num.length() != 0){
text.setText(text.getText().substring(0, text.getText().length()-1));
num = num.substring(0, num.length()-1);
}
else if(operator.length() != 0){
text.setText(text.getText().substring(0, text.getText().length()-1));
num = text.getText();
operator = "";
}
}
//CE
public void clearEntry(){
if(num.length() != 0){
text.setText(text.getText().substring(0, text.getText().length()-num.length()));
num = "";
}
else if(operator.length() != 0){
text.setText(text.getText().substring(0, text.getText().length()-1));
}
}
public String stringAdd(String str1, String str2){
if(str1.length() == 0)
str1 = "0";
if(str2.length() == 0)
str2 = "0";
return String.valueOf(Double.parseDouble(str1)+Double.parseDouble(str2));
}
public String stringSub(String str1, String str2){
return String.valueOf(Double.parseDouble(str1)-Double.parseDouble(str2));
}
/****************************事件响应***********************************/
public void actionPerformed(ActionEvent e) {
String str = ((AbstractButton) e.getSource()).getText();
switch(str){
case "0":
case "1":
case "2":
case "3":
case "4":
case "5":
case "6":
case "7":
case "8":
case "9":
text.setText(text.getText()+str);
num = num + str;
break;
case ".":
if(num.length() == 0)
text.setText("数据格式错误");
text.setText(text.getText()+str);
num = num + str;
break;
case "+":
case "-":
case "*":
case "/":
if(num.length()==0) text.setText("错误,操作数为空");
else if(operator.length() == 1) text.setText("运算符格式错误");
else{
operator = str;
op = OperateFactory.creatOperate(operator);
op.setA(Double.parseDouble(num));
num = "";
text.setText(text.getText()+str);
}
break;
case "√":
operator = "√";
text.setText("√("+text.getText()+")");
break;
case "=":
result = this.getResult();
text.setText(result);
break;
case "CE":
if(num.length() != 0 | operator.length() != 0)
this.clearEntry();
break;
case "C":
text.setText("");
num = "";
break;
case "←":
this.delete();
break;
case "mc":
mresult = "";
// System.out.println("mc: "+mresult);
text.setText("");
break;
case "m+":
result = this.getResult();
// System.out.println("m+1: "+mresult);
mresult = this.stringAdd(mresult, result);
// System.out.println("m+2: "+mresult);
text.setText("");
break;
case "m-":
result = this.getResult();
// System.out.println("m-1: "+mresult);
mresult = this.stringSub(mresult, result);
// System.out.println("m-2: "+mresult);
text.setText("");
break;
case "mr":
// System.out.println("mr: "+mresult);
if(mresult.length() != 0)
text.setText(mresult);
break;
}
}
}
\\ Operation.java
abstract class Operation{
protected double numberA = 0, numberB = 0;
public Operation(){}
public Operation(double numberA, double numberB) {
this.numberA = numberA;
this.numberB = numberB;
}
public void setA(double numberA) {
this.numberA = numberA;
}
public void setB(double numberB) {
this.numberB = numberB;
}
public abstract double getResult();
}
//加
class OperationAdd extends Operation{
public OperationAdd(){}
public OperationAdd(double numberA, double numberB) {
super(numberA, numberB);
}
public double getResult(){
return numberA + numberB;
}
}
//减
class OperationSub extends Operation{
public OperationSub(){}
public OperationSub(double numberA, double numberB) {
super(numberA, numberB);
}
public double getResult(){
return numberA - numberB;
}
}
//乘
class OperationMul extends Operation{
public OperationMul(){}
public OperationMul(double numberA, double numberB) {
super(numberA, numberB);
}
public double getResult(){
return numberA * numberB;
}
}
//除
class OperationDiv extends Operation{
public OperationDiv(){}
public OperationDiv(double numberA, double numberB) {
super(numberA, numberB);
}
public double getResult() {
String result = String.valueOf(numberA/numberB);
if(result.length()>15) result = result.substring(0, 15);
return Double.parseDouble(result);
}
}
class OperateFactory{
public static Operation creatOperate(String operate){
Operation op = null;
switch(operate.charAt(0)){
case '+': op = new OperationAdd();
break;
case '-': op = new OperationSub();
break;
case '*': op = new OperationMul();
break;
case '/': op = new OperationDiv();
break;
}
return op;
}
}