Operation运算类
abstract public class Operation {
private double numberA=0;
private double numberB=0;
public Operation(double numberA, double numberB) {
super();
this.numberA = numberA;
this.numberB = numberB;
}
public Operation() {
super();
}
public double getNumberA() {
return numberA;
}
public void setNumberA(double numberA) {
this.numberA = numberA;
}
public double getNumberB() {
return numberB;
}
public void setNumberB(double numberB) {
this.numberB = numberB;
}
abstract public double GetResult();
}
加减乘除类
public class OperationAdd extends Operation {
@Override
public double GetResult() {
double result=0;
result=getNumberA()+getNumberB();
return result;
}
}
public class OperationSub extends Operation{
@Override
public double GetResult() {
double result=0;
result=getNumberA()-getNumberB();
return result;
}
}
public class OperationMul extends Operation{
@Override
public double GetResult() {
double result=0;
result=getNumberA()*getNumberB();
return result;
}
}
public class OperationDiv extends Operation{
@Override
public double GetResult() {
double result=0;
if(getNumberB()==0)
try {
throw new Exception("除数不为0");
} catch (Exception e) {
e.printStackTrace();
}
result=getNumberA()/getNumberB();
return result;
}
}
简单工厂运算类
public class OperationFactory {
public static Operation createOperate(String operate)
{
Operation oper=null;
switch(operate)
{
case "+":
oper=new OperationAdd();
break;
case "-":
oper=new OperationSub();
break;
case "*":
oper=new OperationMul();
break;
case "/":
oper=new OperationDiv();
break;
}
return oper;
}
}
GUI界面
import java.awt.Button;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class MyFrame extends Frame {
private static final long serialVersionUID = 1L;
public TextArea ta;
public MyFrame(String title) {
super(title);
SetTextAreas();
SetBUttonArea();
SetMainFram();
}
@SuppressWarnings("deprecation")
private void SetMainFram() {
this.setLayout(null);
this.setSize(500, 400);
this.setVisible(true);
this.setLocation(310, 340);
this.setResizable(false);
ta.setEditable(false);
this.setCursor(Cursor.HAND_CURSOR);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
private void SetTextAreas() {
ta = new TextArea(" ", 8, 52, 3);
ta.setBackground(Color.white);
ta.setLocation(20, 60);
ta.setSize(480, 100);
ta.setFont(new Font("", Font.BOLD, 40));
this.add(ta);
}
double m, n;
String k;
boolean flag = true;
boolean flag2 = false;
Color wathet=new Color(129,213,248);//设置颜色
protected void addButton(String string ,int i,int j, int x,int y){//设置按键的大小位置
final Button b=new Button(string);
b.setLocation(x, y);
b.setSize(i,j);
b.setBackground(wathet);
b.setForeground(Color.white);
b.setFont(new Font("",Font.BOLD, 40));
b.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
counts();
}
private void counts() {
Operation oper;
if(ta.getText().equals("")&&(b.getActionCommand().equals("+")||
b.getActionCommand().equals("-")||
b.getActionCommand().equals("*")||
b.getActionCommand().equals("/")||
b.getActionCommand().equals("="))) {
}else if(ta.getText().equals(".")&&(b.getActionCommand().equals("+")||
b.getActionCommand().equals("-")||
b.getActionCommand().equals("*")||
b.getActionCommand().equals("/")||
b.getActionCommand().equals("="))){
}else {
if( b.getActionCommand().equals("+")||
b.getActionCommand().equals("-")||
b.getActionCommand().equals("*")||
b.getActionCommand().equals("/")){
if(flag2 = true) {
flag2 = false;
}
if(flag) {
n = new Double(ta.getText()).doubleValue();
flag = false;
}else {
if(k=="="){
}else {
m = new Double(ta.getText()).doubleValue();
if(k == "-") {
oper=OperationFactory.createOperate("-");
oper.setNumberA(m);
oper.setNumberB(n);
}else if(k == "+") {
oper=OperationFactory.createOperate("+");
oper.setNumberA(m);
oper.setNumberB(n);
}else if(k == "*") {
oper=OperationFactory.createOperate("*");
oper.setNumberA(m);
oper.setNumberB(n);
}else if(k == "/") {
oper=OperationFactory.createOperate("/");
oper.setNumberA(m);
oper.setNumberB(n);
}
}
}
k = b.getActionCommand();
ta.setText("");
}else if(b.getActionCommand().equals("=")) {
m = new Double(ta.getText()).doubleValue();
if(k == "+") {
ta.setText("");
ta.append(n+"+"+m);
ta.append(System.getProperty("line.separator"));
n = n+m;
ta.append("="+n);
}else if(k == "-") {
ta.setText("");
ta.append(n+"-"+m);
ta.append(System.getProperty("line.separator"));
n = n-m;
ta.append("="+n);
}else if(k == "*") {
ta.setText("");
ta.append(n+"*"+m);
ta.append(System.getProperty("line.separator"));
n = n*m;
ta.append("="+n);
}else if(k == "/") {
ta.setText("");
ta.append(n+"/"+m);
ta.append(System.getProperty("line.separator"));
n= n/m;
ta.append("="+n);
}
k="=";
flag2 = true;
}else {
if(flag2) {
flag = true;
flag2 = false;
ta.setText("");
m = n =0;
}
ta.append(b.getActionCommand());
}
}
}
});
this.add(b);
}
private void SetBUttonArea() {
addButton("7", 120, 50, 20, 178);
addButton("8", 120, 50, 140, 178);
addButton("9", 120, 50, 260, 178);
addButton("/", 120, 50, 380, 178);
addButton("4", 120, 50, 20, 228);
addButton("5", 120, 50, 140, 228);
addButton("6", 120, 50, 260, 228);
addButton("*", 120, 50, 380, 228);
addButton("1", 120, 50, 20, 278);
addButton("2", 120, 50, 140, 278);
addButton("3", 120, 50, 260, 278);
addButton("-", 120, 50, 380, 278);
addButton("0", 120, 50, 20, 328);
addButton(".", 120, 50, 140, 328);
addButton("+", 120, 50, 260, 328);
addButton("=", 120, 50, 380, 328);
}
}
实现:
public class CalGUI {
public static void main(String[] args)
{
new MyFrame("Yamato 计算器");
}
}