当前位置:   article > 正文

Java实现简单计算器(GUI)页面(适合入门)_java计算器界面设计

java计算器界面设计

1.计算器达到目的

使用Java Swing的GUI图形用户界面编程设计并编写一个简易计算器程序,用户通过鼠标或者键盘操作输入参加运算的数值和运算符,要求能进行简单的四则运算。

2.实现效果如下:

 3.实现代码

  1. package cn;
  2. import java.util.*;
  3. import java.awt.*;
  4. import javax.swing.*;
  5. import javax.script.*;
  6. import java.awt.event.*;
  7. import java.math.BigDecimal;
  8. import java.awt.event.ActionEvent;
  9. import java.awt.event.ActionListener;
  10. /*创建主类E_calculator*/
  11. public class E_calculator {
  12. JButton st; // st的作用类似于寄存器
  13. /* 以下i_1至i_5为状态开关 */
  14. int i_1 = 1;
  15. int i_2 = 1; // 开关2用于记录符号键的次数
  16. int i_3 = 1; // 开关3用于标识 str1 是否可以被清 0
  17. int i_4 = 1; // 开关4用于标识 str2 是否可以被清 0
  18. int i_5 = 1; // 开关5用于控制小数点可否被录入
  19. String str1 = "0"; // 操作数1,为了程序的安全,初值设置为0
  20. String str2 = "0"; // 操作数2
  21. String signal = "+"; // 运算符
  22. String result = ""; // 运算结果
  23. Vector vt = new Vector(20, 20);
  24. // 创建一个 JFrame 对象并初始化
  25. JFrame frame = new JFrame("简易计算器");
  26. // JTextField用于显示操作和计算结果的文本框
  27. JTextField TextField = new JTextField(result, 30);
  28. JButton clear_Button = new JButton("清 除"); // 清除按钮
  29. /* 数字键09 */
  30. JButton button0 = new JButton("0");
  31. JButton button1 = new JButton("1");
  32. JButton button2 = new JButton("2");
  33. JButton button3 = new JButton("3");
  34. JButton button4 = new JButton("4");
  35. JButton button5 = new JButton("5");
  36. JButton button6 = new JButton("6");
  37. JButton button7 = new JButton("7");
  38. JButton button8 = new JButton("8");
  39. JButton button9 = new JButton("9");
  40. // 计算命令按钮,加减乘除以及小数点等
  41. JButton button_jia = new JButton("+");
  42. JButton button_jian = new JButton("—");
  43. JButton button_cheng = new JButton("*");
  44. JButton button_chu = new JButton("/");
  45. JButton button_dy = new JButton("=");
  46. JButton button_Dian = new JButton(".");
  47. //创建E_calculator()方法中编写数字键的响应逻辑
  48. public E_calculator() {
  49. button0.setMnemonic(KeyEvent.VK_0);
  50. TextField.setHorizontalAlignment(JTextField.RIGHT);
  51. JPanel panel = new JPanel();// 创建一个 Jpanel 对象并初始化
  52. // 设置该容器的布局为四行四列,边距为10像素
  53. panel.setLayout(new GridLayout(4, 4, 10, 10));
  54. panel.setSize(500, 800);
  55. panel.setBackground(Color.gray); // 设置背景颜色为灰色
  56. /* 将用于计算的按钮添加到容器内 */
  57. panel.add(button7);
  58. panel.add(button8);
  59. panel.add(button9);
  60. panel.add(button_cheng);
  61. panel.add(button4);
  62. panel.add(button5);
  63. panel.add(button6);
  64. panel.add(button_chu);
  65. panel.add(button1);
  66. panel.add(button2);
  67. panel.add(button3);
  68. panel.add(button_jian);
  69. panel.add(button0);
  70. panel.add(button_Dian);
  71. panel.add(button_dy);
  72. panel.add(button_jia);
  73. // 设置panel对象的边距为16
  74. panel.setBorder(BorderFactory.createEmptyBorder(16, 16, 16, 16)); JPanel panel2 = new JPanel(); // 按照同样的方式设置第二个JPanel
  75. panel2.add(TextField, BorderLayout.WEST);
  76. panel2.add(clear_Button, BorderLayout.EAST);
  77. frame.setLocation(400, 200); // 设置主窗口出现在屏幕上的位置
  78. frame.setResizable(true); // 设置窗体可以调大小
  79. frame.getContentPane().setLayout(new BorderLayout());
  80. // 窗体中可以放置 JPanel,这里我们将面板panel和面板panel2让如窗体
  81. frame.getContentPane().add(panel2, BorderLayout.NORTH);
  82. frame.getContentPane().add(panel, BorderLayout.CENTER);
  83. frame.pack();
  84. frame.setVisible(true);
  85. /* Listener类中编写的是数字键的响应逻辑*/
  86. class Listener implements ActionListener {
  87. public void actionPerformed(ActionEvent test) {
  88. String ss = ((JButton) test.getSource()).getText();
  89. st = (JButton) test.getSource();
  90. vt.add(st);
  91. if (i_1 == 1) {
  92. if (i_3 == 1) {
  93. str1 = "";
  94. i_5 = 1;
  95. }
  96. str1 = str1 + ss;
  97. i_3 = i_3 + 1;
  98. TextField.setText(str1);
  99. } else if (i_1 == 2) {
  100. if (i_4 == 1) {
  101. str2 = "";
  102. i_5 = 1;
  103. }
  104. str2 = str2 + ss;
  105. i_4 = i_4 + 1;
  106. TextField.setText(str2);
  107. }
  108. }
  109. }
  110. /* Listener_signal类中编写了运算符号键的响应逻辑 */
  111. class Listener_signal implements ActionListener {
  112. public void actionPerformed(ActionEvent e) {
  113. String ss2 = ((JButton) e.getSource()).getText();
  114. st = (JButton) e.getSource();
  115. vt.add(st);
  116. if (i_2 == 1) {
  117. i_1 = 2;
  118. i_5 = 1;
  119. signal = ss2;
  120. i_2 = i_2 + 1;
  121. } else {
  122. int a = vt.size();
  123. JButton c = (JButton) vt.get(a - 2);
  124. if (!(c.getText().equals("+")) && !(c.getText().equals("—")) && !(c.getText().equals("*"))&& !(c.getText().equals("/"))) {
  125. cal();
  126. str1 = result;
  127. i_1 = 2;
  128. i_5 = 1;
  129. i_4 = 1;
  130. signal = ss2;
  131. }
  132. i_2 = i_2 + 1;
  133. }
  134. }
  135. }
  136. /*Listener_clear类中编写了清除键的响应逻辑*/
  137. class Listener_clear implements ActionListener {
  138. public void actionPerformed(ActionEvent test) {
  139. st = (JButton) test.getSource();
  140. vt.add(st);
  141. i_5 = 1;
  142. i_2 = 1;
  143. i_1 = 1;
  144. i_3 = 1;
  145. i_4 = 1;
  146. str1 = "0";
  147. str2 = "0";
  148. signal = "";
  149. result = "";
  150. TextField.setText(result);
  151. vt.clear();
  152. }
  153. }
  154. /*Listener_dy类中编写的是等于号键的响应逻辑*/
  155. class Listener_dy implements ActionListener {
  156. public void actionPerformed(ActionEvent e) {
  157. st = (JButton) e.getSource();
  158. vt.add(st);
  159. cal();
  160. i_1 = 1;
  161. i_2 = 1;
  162. i_3 = 1;
  163. i_4 = 1;
  164. str1 = result;
  165. }
  166. }
  167. /*Listener_xiaos类中编写的是小数点键的相应逻辑*/
  168. class Listener_xiaos implements ActionListener {
  169. public void actionPerformed(ActionEvent e) {
  170. st = (JButton) e.getSource();
  171. vt.add(st);
  172. if (i_5 == 1) {
  173. String ss2 = ((JButton) e.getSource()).getText();
  174. if (i_1 == 1) {
  175. if (i_3 == 1) {
  176. str1 = "";
  177. i_5 = 1;
  178. }
  179. str1 = str1 + ss2;
  180. i_3 = i_3 + 1;
  181. TextField.setText(str1);
  182. } else if (i_1 == 2) {
  183. if (i_4 == 1) {
  184. str2 = "";
  185. i_5 = 1;
  186. }
  187. str2 = str2 + ss2;
  188. i_4 = i_4 + 1;
  189. TextField.setText(str2);
  190. }
  191. }
  192. i_5 = i_5 + 1;
  193. }
  194. }
  195. // 监听等于键
  196. Listener_dy jt_dy = new Listener_dy();
  197. // 监听数字键
  198. Listener jt = new Listener();
  199. // 监听符号键
  200. Listener_signal jt_signal = new Listener_signal();
  201. // 监听清除键
  202. Listener_clear jt_c = new Listener_clear();
  203. // 监听小数点键
  204. Listener_xiaos jt_xs = new Listener_xiaos();
  205. button7.addActionListener(jt);
  206. button8.addActionListener(jt);
  207. button9.addActionListener(jt);
  208. button_chu.addActionListener(jt_signal);
  209. button4.addActionListener(jt);
  210. button5.addActionListener(jt);
  211. button6.addActionListener(jt);
  212. button_cheng.addActionListener(jt_signal);
  213. button1.addActionListener(jt);
  214. button2.addActionListener(jt);
  215. button3.addActionListener(jt);
  216. button_jian.addActionListener(jt_signal);
  217. button0.addActionListener(jt);
  218. button_Dian.addActionListener(jt_xs);
  219. button_dy.addActionListener(jt_dy);
  220. button_jia.addActionListener(jt_signal);
  221. clear_Button.addActionListener(jt_c);
  222. // 窗体关闭事件的响应程序
  223. frame.addWindowListener(new WindowAdapter() {
  224. public void windowClosing(WindowEvent e) {
  225. System.exit(0);
  226. }
  227. });
  228. }
  229. // cal()方法中编写了计算逻辑的实现。
  230. public void cal() {
  231. double a2,b2; //定义两个变量a2,b2
  232. String c = signal;
  233. double result2 = 0; //初始化
  234. if (c.equals("")) {
  235. TextField.setText("Please input operator");
  236. } else {
  237. if (str1.equals("."))
  238. str1 = "0.0";
  239. if (str2.equals("."))
  240. str2 = "0.0";
  241. a2 = Double.valueOf(str1).doubleValue();
  242. b2 = Double.valueOf(str2).doubleValue();
  243. if (c.equals("+")) {
  244. result2 = a2 + b2;
  245. }
  246. if (c.equals("—")) {
  247. result2 = a2 - b2;
  248. }
  249. if (c.equals("*")) {
  250. BigDecimal m1 = new BigDecimal(Double.toString(a2));
  251. BigDecimal m2 = new BigDecimal(Double.toString(b2));
  252. //乘法运算,只需导入组件(import java.math.BigDecimal)
  253. result2 = m1.multiply(m2).doubleValue();
  254. }
  255. if (c.equals("/")) {
  256. if (b2 == 0) {
  257. result2 = 0;
  258. } else {
  259. result2 = a2 / b2;
  260. }
  261. }
  262. result = ((new Double(result2)).toString());
  263. TextField.setText(result);
  264. }
  265. }
  266. public static void main(String[] args) {
  267. E_calculator CT = new E_calculator();
  268. }
  269. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/275724
推荐阅读
相关标签
  

闽ICP备14008679号