计算器

import java.awt.*;
3.
4.import java.awt.event.*;
5.import java.math.*;
6.import javax.swing.*;
7.
8./**
9. * @author wangjun
10. *
11. */
12.public class JTest extends JFrame {
13.
14. /**
15. * 定义按扭窗口
16. */
17. ResultStr resultStr; // 显示框 继承JPanel
18. NumButtons numButtons; // 按钮面板 继承JPanel
19. MopButs mopButs;
20.
21.
22. // JButton butCE = new JButton("CE"); //ce按钮
23.
24. CEB ceb;
25.
26. // 当点击按钮+、-、*、/ = 时,isE = true
27. boolean isE = false;
28.
29. // 当i=0时说明是我们第一次输入,显示内容为 0 根据输入的情况设置显示内容
30. int i = 0;
31.
32. // 存放显示的内容
33. String text = "";
34.
35. // 存放点击运算符按钮之前的数值
36. double defbutton = 0;
37.
38. // 运算符
39. String op = "";
40.
41. // 上一次的按键
42. String lastKey = null;
43.
44. private void myInit() {
45.
46. resultStr = new ResultStr(); // 显示框对象
47. numButtons = new NumButtons();// 按钮面板对象
48. ceb = new CEB();// 特殊按钮面板对象 CE Backspace
49. mopButs = new MopButs();
50.
51. JPanel panel = new JPanel();
52. panel.setLayout(new BorderLayout());
53.
54. panel.add(mopButs, BorderLayout.WEST);
55. panel.add(resultStr, BorderLayout.NORTH);
56. panel.add(ceb, BorderLayout.SOUTH);
57. panel.add(numButtons, BorderLayout.CENTER);
58. //this.setIconImage( ));
59. //this.setIconImage(image)
60. setBounds(200, 200, 350, 220);
61.
62. // 关闭时 退出程序
63. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
64.
65. setContentPane(panel);
66.
67. // 按钮 0-9 & . 添加监听器 数字按钮监听器
68. numButtons.button0.addActionListener(numberLister);
69. numButtons.button1.addActionListener(numberLister);
70. numButtons.button2.addActionListener(numberLister);
71. numButtons.button3.addActionListener(numberLister);
72. numButtons.button4.addActionListener(numberLister);
73. numButtons.button5.addActionListener(numberLister);
74. numButtons.button6.addActionListener(numberLister);
75. numButtons.button7.addActionListener(numberLister);
76. numButtons.button8.addActionListener(numberLister);
77. numButtons.button9.addActionListener(numberLister);
78. numButtons.buttonpoint.addActionListener(numberLister);
79.
80. // 按钮 +-*/= 添加监听器 运算符按钮监听器
81. numButtons.buttonA.addActionListener(opLister);
82. numButtons.buttonB.addActionListener(op

Lister);
83. numButtons.buttonC.addActionListener(opLister);
84. numButtons.buttonD.addActionListener(opLister);
85.
86. numButtons.buttonE.addActionListener(opLister);
87.
88. // 按钮 sqrt % 1/x +/- CE 添加特殊按钮监听器
89. numButtons.butS.addActionListener(teOpLister);
90. numButtons.but5S.addActionListener(teOpLister);
91. numButtons.butDS.addActionListener(teOpLister);
92. numButtons.butFS.addActionListener(teOpLister);
93.
94. ceb.butCE.addActionListener(teOpLister);
95. ceb.butBp.addActionListener(bp);
96.
97. }
98.
99. // 构造器
100. public JTest(String name) {
101. super(name);
102. myInit();
103. }
104.
105. // 数字按扭监听器
106. ActionListener numberLister = new ActionListener() {
107. public void actionPerformed(ActionEvent event) {
108.
109. JButton b = (JButton) event.getSource();
110. // 按下 1 2 3 4 5 6 7 8 9 时的情况
111. if (b.getText() != "0" && b.getText() != ".") {
112. if (isE == true || i == 0) {
113. resultStr.rsStr.setText(b.getText());
114.
115. } else {
116. text = resultStr.rsStr.getText();
117. if (Float.parseFloat(text) == 0) {
118. if (text.indexOf(".") != -1) {
119. resultStr.rsStr.setText(text + b.getText());
120. } else {
121. resultStr.rsStr.setText(b.getText());
122. }
123. } else {
124. resultStr.rsStr.setText(text + b.getText());
125. }
126.
127. }
128. isE = false;
129. i = 1;
130.
131. }
132. // 0 的情况
133. if (b.getText() == "0") {
134. if (isE == true || i == 0) {
135. resultStr.rsStr.setText(b.getText());
136. isE = false;
137. i = 1;
138. } else {
139. /*
140. * 判断条件如果text中的数值=0保持不变 不等于 0
141. * 判断在这个数值中是否有.存在?如果有那么就在原来数值基础之上添 加0;否则保持原来的数值不变
142. */
143. text = resultStr.rsStr.getText();
144. if (Float.parseFloat(text) != 0) {
145. resultStr.rsStr.setText(text + "0");
146. } else {
147. if (text.trim().indexOf(".") == -1) {
148. resultStr.r

sStr.setText(text);
149. } else {
150. resultStr.rsStr.setText(text + "0");
151. }
152. }
153. }
154. }
155.
156. // . 的情况
157. if (b.getText() == ".") {
158. if (isE == true || i == 0) {
159. resultStr.rsStr.setText("0.");
160. isE = false;
161. i = 1;
162. } else {
163. text = resultStr.rsStr.getText();
164. if (text.trim().indexOf(".") == -1) {
165. resultStr.rsStr.setText(text + ".");
166. } else {
167. resultStr.rsStr.setText(text);
168. }
169. }
170. isE = false;
171. i = 1;
172. }
173. lastKey = b.getText();
174. }
175.
176. };
177. // + - * / = 按扭监听器
178. ActionListener opLister = new ActionListener() {
179. public void actionPerformed(ActionEvent event) {
180.
181. JButton b = (JButton) event.getSource();
182. if (lastKey != "+" && lastKey != "-" && lastKey != "*"
183. && lastKey != "/") {
184. // 如果lastKey 不是运算符 做相应的运算 否则不变
185. if (b.getText() != "=") {
186. if (op != "") {
187. getRsStr(true); // 计算结果 true 为不是按 = 计算
188. } else {
189. defbutton = Double.parseDouble(resultStr.rsStr
190. .getText());
191. }
192. isE = true;
193. i = 0;
194.
195. } else {
196. getRsStr(false); // 计算结果 false 为按 = 计算
197. }
198. }
199.
200. // 最后记录相应的信息
201. op = b.getText();
202. lastKey = b.getText();
203. defbutton = Double.parseDouble(resultStr.rsStr.getText());
204. }
205.
206. };
207.
208. // 计算结果 当按下+ - * / 计算时参数是true 否则为 false
209. public void getRsStr(boolean bl) {
210. if (op != "") {
211. Double d = Double.parseDouble(resultStr.rsStr.getText());
212. if (op == "+") {
213. resultStr.rsStr.setText(String.valueOf(defbutton + d));
214.
215. }
216. if (op == "-") {
217. resultStr.rsStr.setText(String.valueOf(defbutton - d));
218.
219. }
220. if (op == "

*") {
221. resultStr.rsStr.setText(String.valueOf(defbutton * d));
222.
223. }
224. if (op == "/") {
225. resultStr.rsStr.setText(String.valueOf(defbutton / d));
226.
227. }
228. if (bl == false) { // 按钮 = 计算后 清空 否则不用清空
229. i = 0;
230. text = "";
231.
232. }
233.
234. }
235. }
236.
237. // sqrt % 1/x +/- 按扭监听器
238. ActionListener teOpLister = new ActionListener() {
239. public void actionPerformed(ActionEvent event) {
240.
241. JButton b = (JButton) event.getSource();
242. try {
243. defbutton = Double.parseDouble(resultStr.rsStr.getText());
244.
245. if (b.getText() == "sqrt") {
246. resultStr.rsStr.setText(String
247. .valueOf(Math.sqrt(defbutton)));
248. }
249. if (b.getText() == "%") {
250. // 未计算
251. // resultStr.rsStr.setText(String.valueOf(defbutton*100));
252. }
253. if (b.getText() == "1/x") {
254. resultStr.rsStr.setText(String.valueOf(1 / defbutton));
255. }
256. if (b.getText() == "+/-") {
257. resultStr.rsStr.setText(String.valueOf(-defbutton));
258. }
259.
260. if (b.getText() == "C") {
261. resultStr.rsStr.setText("0");
262. }
263.
264. } catch (NumberFormatException e) {
265. // TODO Auto-generated catch block
266.
267. resultStr.rsStr.setText("0");
268. e.printStackTrace();
269. }
270.
271. i = 0;
272. text = "";
273. op = "";
274. defbutton = 0.0;
275. lastKey = b.getText();
276. }
277.
278. };
279. // Backspace 监听器
280. ActionListener bp = new ActionListener() {
281. public void actionPerformed(ActionEvent event) {
282. // 保存显示内容
283. String str = resultStr.rsStr.getText();
284.
285. if (str.length() > 1) {
286. // 显示内容的长度大于1时 去掉最后一位
287. str = str.substring(0, str.length() - 1);
288. resultStr.rsStr.setText(str);
289. // 去掉后如果 最后一位是 . 也去掉
290. if (resultStr.rsStr.getText().indexOf(".") == resultStr.rsStr
291. .getText().length() - 1) {
292. resultStr.rsStr.setText(resultStr.rsStr.getText()

293. .substring(0,
294. resultStr.rsStr.getText().length() - 1));
295. }
296. }
297. // 否则显示为 0
298. else {
299. str = "0";
300. resultStr.rsStr.setText(str);
301. }
302. lastKey = "Backspace";
303. }
304. };
305.
306. public static void main(String[] args) {
307. // TODO Auto-generated method stub
308.
309. JTest m = new JTest("计算器");
310. m.setVisible(true);
311. }
312.
313.}
314.
315.class ResultStr extends JPanel {
316.
317. JTextField rsStr = new JTextField("0");
318.
319. ResultStr() {
320. rsStr.setHorizontalAlignment(SwingConstants.RIGHT);
321. rsStr.enable(false);
322. rsStr.setFont(new Font("宋体",5,24));
323.
324. setLayout(new BorderLayout());
325. add(rsStr, BorderLayout.CENTER);
326. }
327.}
328.
329.class NumButtons extends JPanel {
330.
331. JButton button1 = new JButton("1");
332. JButton button2 = new JButton("2");
333. JButton button3 = new JButton("3");
334. JButton button4 = new JButton("4");
335. JButton button5 = new JButton("5");
336. JButton button6 = new JButton("6");
337. JButton button7 = new JButton("7");
338. JButton button8 = new JButton("8");
339. JButton button9 = new JButton("9");
340. JButton button0 = new JButton("0");
341. JButton buttonpoint = new JButton(".");
342.
343. JButton buttonA = new JButton("+");
344. JButton buttonB = new JButton("-");
345. JButton buttonC = new JButton("*");
346. JButton buttonD = new JButton("/");
347. JButton buttonE = new JButton("=");
348.
349. JButton butS = new JButton("sqrt");
350. JButton but5S = new JButton("%");
351. JButton butDS = new JButton("1/x");
352. JButton butFS = new JButton("+/-");
353.
354. NumButtons() {
355. setLayout(new GridLayout(4, 5));
356. add(button1);
357. add(button2);
358. add(button3);
359. add(buttonA);
360. add(butS);
361. add(button4);
362. add(button5);
363. add(button6);
364. add(buttonB);
365. add(but5S);
366. add(button7);
367. add(button8);
368. add(button9);
369. add(buttonC);
370. add(butDS);
371. add(button0);
372. add(buttonpoint);
373. add(buttonD);
374. add(buttonE);
375. add(butFS);
376.
377. }
378.
379.}
380.
381.class CEB extends JPanel {
382.
383. JButton butCE = new JButton("C");
384. JButton butBp = new J

Button("Backspace");
385.
386. CEB() {
387. setLayout(new GridLayout(1, 2));
388. add(butCE);
389. add(butBp);
390. }
391.}
392.
393.class MopButs extends JPanel {
394. JButton mAdd = new JButton("M+");
395. JButton mC = new JButton("MC");
396. JButton mR = new JButton("MR");
397. JButton mS = new JButton("MS");
398.
399. MopButs() {
400. setLayout(new GridLayout(4, 1));
401. add(mC);
402. add(mR);
403. add(mS);
404. add(mAdd);
405. }
406.}

相关文档
最新文档