1 import java.awt.*;
2 import java.awt.event.*;
3 public class calculator//一个类。
4 {
5 public static void main(String args[])//主函数。
6 {
7 MyWindow my=new MyWindow("计算器"); //设置框架标题
8 }
9 }
10 class MyWindow extends Frame implements ActionListener
11 { StringBuffer m=new StringBuffer();//创建一个实例。
12 int p;
13 TextField tex;//定义一个文本行。
14 Button b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,jia,jian,cheng,chu,deng,dian,qingling,sin,cos,tan;//定义按钮。
15 MyWindow(String s)//类的构造方法。
16 {super(s);
17 StringBuffer s2=new StringBuffer();
18 String s;
19 tex=new TextField(18);
20 b0=new Button(" 0 ");
21 b1=new Button(" 1 ");
22 b2=new Button(" 2 ");
23 b3=new Button(" 3 ");
24 b4=new Button(" 4 ");
25 b5=new Button(" 5 ");
26 b6=new Button(" 6 ");
27 b7=new Button(" 7 ");
28 b8=new Button(" 8 ");
29 b9=new Button(" 9 ");
30 dian=new Button(" . ");
31 jia=new Button(" + ");
32 jian=new Button(" - ");
33 cheng=new Button(" × ");
34 chu=new Button(" / ");
35 deng=new Button(" = ");
36 qingling=new Button(" 清零 ");
37 sin=new Button("sin");
38 cos=new Button("cos");
39 tan=new Button("tan");//创建实例,并对实例成员变量进行初始化。setLayout(new FlowLayout());//设置为流布局管理。
40 add(tex);
41 add(b0);
42 add(b1);
43 add(b2);
44 add(b3);
45 add(b4);
46 add(b5);
47 add(b6);
48 add(b7);
49 add(b8);
50 add(b9);
51 add(dian);
52 add(jia);
53 add(jian);
54 add(cheng);
55 add(chu);
56 add(qingling);
57 add(deng);
58 add(cos);
59 add(sin);
60 add(tan);//添加每个按钮和文本行放在窗口上。
61 b0.addActionListener(this);
62 b1.addActionListener(this);
63 b2.addActionListener(this);
64 b3.addActionListener(this);
65 b4.addActionListener(this);
66 b5.addActionListener(this);
67 b6.addActionListener(this);
68 b7.addActionListener(this);
69 b8.addActionListener(this);
70 b9.addActionListener(this);
71 jia.addActionListener(this);
72 jian.addActionListener(this);
73 cheng.addActionListener(this);
74 chu.addActionListener(this);
75 dian.addActionListener(this);
76 deng.addActionListener(this);
77 qingling.addActionListener(this);
78 sin.addActionListener(this);
79 cos.addActionListener(this);
80 tan.addActionListener(this);//为按钮注册窗口事件监听器,委托Winclose对象处理事件。
81 setBounds(200,200,160,280);//设置窗口大小。
82 setResizable(false);//不可改变大小
83 setVisible(true);//窗口可视化。
84 validate();//布局美观。
85 addWindowListener(new WindowAdapter()//实现窗口事件监听器接口。
86 { public void windowClosing(WindowEvent ee)//窗口关闭事件处理方法。
87 { System.exit(0);}}}
88 public void actionPerformed(ActionEvent e)//单机事件处理方法,实现//ActionListener接口。
89 {
90 if(e.getSource()==b0)//获得当前事件源组件,比较引用
91 {
92 m=m.append("0");//字符串转换为整数。
93 tex.setText(String.valueOf(m)); //将m转换成字符串。
94 }if(e.getSource()==b1)
95 { m=m.append("1"); tex.setText(String.valueOf(m));
96 }
97 if(e.getSource()==b2){
98 m=m.append("2"); tex.setText(String.valueOf(m));
99 }
100 if(e.getSource()==b3)
101 {
102 m=m.append("3"); tex.setText(String.valueOf(m));
103 }
104 if(e.getSource()==b4)
105 {
106 m=m.append("4"); tex.setText(String.valueOf(m));
107 }
108 if(e.getSource()==b5)
109 {
110 m=m.append("5"); tex.setText(String.valueOf(m));
111 }
112 if(e.getSource()==b6)
113 {
114 m=m.append("6"); tex.setText(String.valueOf(m));
115 }
116 if(e.getSource()==b7)
117 {
118 m=m.append("7"); tex.setText(String.valueOf(m));
119 }
120 if(e.getSource()==b8)
121 {
122 m=m.append("8"); tex.setText(String.valueOf(m));
123 }if(e.getSource()==b9)
124 {m=m.append("9"); tex.setText(String.valueOf(m));
125 }
126 if(e.getSource()==jia)
127 { m=m.append("+"); tex.setText(String.valueOf(m));
128 }if(e.getSource()==jian)
129 {m=m.append("-"); tex.setText(String.valueOf(m));
130 }
131 if(e.getSource()==cheng)
132 { m=m.append("*"); tex.setText(String.valueOf(m));
133 }
134 if(e.getSource()==chu)
135 { m=m.append("/"); tex.setText(String.valueOf(m));
136 }
137 if(e.getSource()==dian)
138 { m=m.append("."); tex.setText(String.valueOf(m));
139 }
140 String mm=String.valueOf(m);
141 int p1=mm.indexOf("+");//字符串的IndexOf()方法搜索在该字符串上是否出现了作为//参数传递的字符串,
142 int p2=mm.indexOf("-");//如果找到字符串,则返回字符的起始位置 (0表示第
143 int p3=mm.indexOf("*");//一个字符,1表示第二个字符依此类推)如果说没有找到则返//回 -1.
144 int p4=mm.indexOf("/");
145 if(p1!=-1){
146 p=p1;
147 }
148 else if(p3!=-1)
149 {p=p3;
150 } else if(p2!=-1)
151 {
152 p=p2;
153 }
154 else if(p4!=-1)
155 {p=p4;
156 }
157 if(e.getSource()==deng)
158 { String m1=mm.substring(0,p);
159 String m2=mm.substring(p+1);
160 String ch=mm.substring(p,p+1);
161 if(ch.equals("+"))
162 {
163 float n1=Float.parseFloat(m1); //字符串转换为整数。
164 float n2=Float.parseFloat(m2);
165 float sum=n1+n2;
166 String su=String.valueOf(sum);//数字转换为字符串。
167 tex.setText(su);
168 }
169 if(ch.equals("-"))//按钮为“-”。
170 { float n1=Float.parseFloat(m1);
171 float n2=Float.parseFloat(m2);
172 float sum=n1-n2;
173 String su=String.valueOf(sum);
174 tex.setText(su);
175 }
176 if(ch.equals("*"))
177 {
178 float n1=Float.parseFloat(m1);
179 float n2=Float.parseFloat(m2);
180 float sum=n1*n2;
181 String su=String.valueOf(sum);
182 tex.setText(su);
183 }if(ch.equals("/"))
184 {
185 float n1=Float.parseFloat(m1);
186 float n2=Float.parseFloat(m2);
187 float sum=n1/n2;
188 String su=String.valueOf(sum);
189 tex.setText(su);
190 }}
191 if(e.getSource()==qingling)
192 {StringBuffer kk=new StringBuffer();
193 m=kk;
194 tex.setText("0");
195 }
196 if(e.getSource()==sin)
197 {
198 String t=tex.getText();
199 double num=Float.parseFloat(t);
200 num=num*(Math.PI/180);
201 double nub=Math.sin(num);
202 tex.setText(String.valueOf(nub));
203 }
204 if(e.getSource()==cos)
205 {
206 String t=tex.getText();
207 double num=Float.parseFloat(t);
208 num=num*(Math.PI/180);//弧度转换为角度。
209 double nub=Math.cos(num);
210 tex.setText(String.valueOf(nub));
211 }
212 if(e.getSource()==tan)
213 {
214 String t=tex.getText();
215 double num=Float.parseFloat(t);
216 num=num*(Math.PI/180);
217 double nub=Math.tan(num);
218 tex.setText(String.valueOf(nub))
219 }
220 }
221 }
222