1 //没有做清零处理,因此是一直计算下去
  2 package calculator;
3 import java.awt.event.*;
4 import javax.swing.*;
5
6 public class Image extends JFrame implements ActionListener{
7 private JPanel jp=new JPanel();
8 private JButton[] jbArray1=new JButton[16];//创建按钮1数组
9 //创建按钮2数组并且初始化
10 private JButton[] jbArray2={new JButton("+"),new JButton("-"),new JButton("*"),new JButton("/"),new JButton("="),new JButton(".")};
11
12 private JTextArea jta=new JTextArea("");//创建文本区
13 private Jusuan js = new Jusuan();//创建一个Jusuan的对象
14 private String s;//中间变量
15
16 public void Frame(){
17 //设置JPanel的布局管理器
18 jp.setLayout(null);
19 //设置文本区大小及位置
20 jta.setBounds(10,10,200,40);
21 jp.add(jta);
22 jta.setVisible(true);
23
24 //初始化jbArray1,并把按钮1添加进JPanel,并且为每个按钮注册监听器
25 for(int i=0;i<jbArray1.length;i++){
26 if(i<10){
27 jbArray1[i]=new JButton(""+i);
28 }else{
29 jbArray1[i]=jbArray2[i-10];
30 }
31
32 //设置按钮的位置大小
33 if(i<4){
34 jbArray1[i].setBounds(10+i*50, 60, 50, 50);
35 }else if(i<8){
36 jbArray1[i].setBounds(10+(i-4)*50, 120, 50, 50);
37 }else if(i<12){
38 jbArray1[i].setBounds(10+(i-8)*50, 180, 50, 50);
39 }else{
40 jbArray1[i].setBounds(10+(i-12)*50, 240, 50, 50);
41 }
42 jp.add(jbArray1[i]);
43 jbArray1[i].addActionListener(this);//为每个按钮设置响应
44 }
45
46
47 //将JPanel添加进窗体
48 this.add(jp);
49 this.setTitle("Calculator");
50 this.setBounds(0, 0, 250, 350);
51 this.setResizable(false);
52 this.setVisible(true);
53 }
54
55
56 public void actionPerformed(ActionEvent e){
57 for(int i=0;i<jbArray1.length;i++){
58 if(e.getSource()==jbArray1[i]){
59
60 String s = jbArray1[i].getLabel();//中间变量,保持按钮的输入
61 //按钮响应函数
62 switch(i){
63 case 0:
64 case 1:
65 case 2:
66 case 3:
67 case 4:
68 case 5:
69 case 6:
70 case 7:
71 case 8:
72 case 9: {
73 Image.this.jta.setText(jta.getText()+s);
74 break;
75 }
76 case 10:{
77 js.add(jta.getText());//调用Jusuan类中的add加法方法
78 Image.this.jta.setText("");//清空文本区
79 break;
80 }
81 case 11:{
82 js.sub(jta.getText());
83 Image.this.jta.setText("");
84 break;
85 }
86 case 12:{
87 js.mul(jta.getText());
88 Image.this.jta.setText("");
89 break;
90 }
91 case 13:{
92 js.div(jta.getText());
93 Image.this.jta.setText("");
94 break;
95 }
96 case 14:{
97 Image.this.jta.setText(js.Equals(jta.getText()));
98 break;
99 }
100 case 15:{
101 Image.this.jta.setText(jta.getText()+"."); //“。”按钮显示文本区“原来的数。”,然后继续输入数据再进行switch选择
102 break;
103 }
104 }
105 }
106 }
107 }
108
109
110
111 public static void main(String args[]){
112 Image calculator=new Image();
113 calculator.Frame();
114 }
115 }
 1 package calculator;
2
3
4 public class Jusuan {
5
6 private final int add=1,sub=2,mul=3,div=4;
7 private int op;
8 private String result="0";
9
10
11 public void operate(String x){
12
13 double x1=stringToDouble(x);
14 double y=stringToDouble(result);
15
16 switch (op){
17 case 0:
18 result = x;
19 break;
20 case 1:
21 result = String.valueOf(y+x1);
22 break;
23 case 2:
24 result = String.valueOf(y-x1);
25 break;
26 case 3:
27 result = String.valueOf(y*x1);
28 break;
29 case 4:
30 if(x1!=0){
31 result = String.valueOf(y/x1);
32 }else{
33 result = "The divisor can't be zero!";
34 }
35 break;
36 }
37 }
38 //string类型 到 double类型 转换
39 public double stringToDouble(String x){
40 double y = Double.parseDouble(x);
41 return y;
42 }
43
44 public String add(String x){
45 operate(x);
46 op=add;
47 return result;
48 }
49
50 public String sub(String x){
51 operate(x);
52 op=sub;
53 return result;
54 }
55
56 public String mul(String x){
57 operate(x);
58 op=mul;
59 return result;
60 }
61
62 public String div(String x){
63 operate(x);
64 op=div;
65 return result;
66 }
67
68 public String Equals(String x){
69 operate(x);
70 op = 0;
71 return result;
72 }
73
74
75 }


运行界面: