该程序是一个图形界面的简单 Java 计算器,具有良好的界面,使用人员能快捷简单的进行加、减、 乘、除、操作。其程序要求为设计一个图形界面(GUI)的计算器应用程序,完成简单的加法、减法、乘 法、除法运算,且参与计算的数字和所得结果可以有小数点、正负号,同时还要具备清零功能。
一、需求分析 根据项目简介中的项目要求,我们将其具体需求做如下分析: 1. 要使用 java 的 GUI 设计出计算器界面。 2. 通过界面按钮,可以进行加减乘除运算,并能将结果显示在界面中。 3. 计算可以有小数点,和正负整数的计算。 4. 要有清零功能。
二、设计思路: 分析完项目需求后,接下来让我们看一下项目的设计思路。 1.本应用程序继承自框架类(Frame),此程序使用 Frame 布局管理器 BorderLayout,将包含单行文本 框和清零按钮的 Panel2 加入到“North”区域,包含各种按钮的面板 Panel1 加入到”Center”区域。包 含各种按钮的面板 Panel1 采用 4 行 4 列的网格布局,然后将数字按钮和运算符按钮以及控制按钮添加到 面板中。 2.项目中要注册按钮事件监听器 ActionListener;事件监听器中的事件处理方法 public void actionPerformed(ActionEvent evt)完成主要的按钮事件的处理。 3.事件处理分以下几种情况:数字按钮事件(”0”,”1”,”2”„”8”,”9”)、运算符按钮事件(”+”,” -“,”*”,”/”)小数点按钮事件(”.”)、等号按钮事件(”=”)、清楚按钮事件(“CE”)。 4.计算器完成的是一个数学表达式,里面涉及到的就是加、减、乘、除的基本操作,仅需定义一个变 量来保存运算操作的前一个数字,与当前在计算器上的显示数字进行计算即可。
代码如下:
1import java.awt.*; 2import java.awt.event.*; 3import javax.swing.*; 4import java.util.*; 5class Calculator implements ActionListener { 6 JButton b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, 7 b16; 8 JFrame f; 9 GridLayout c = new GridLayout(4, 4); 10 JTextField tf = new JTextField(); 11public void init() { 12 f = new JFrame("CardLayout testing"); 13 Container ct = f.getContentPane(); 14 tf.setHorizontalAlignment(JTextField.RIGHT); 15 ct.add(tf, "North"); 16 JPanel p2 = new JPanel(); 17 ct.add(p2, "Center"); 18 GridLayout c = new GridLayout(4, 4); 19 p2.setLayout(c); 20 JButton b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16; 21 b1 = new JButton("1"); 22 b2 = new JButton("2"); 23 b3 = new JButton("3"); 24 b4 = new JButton("4"); 25 b5 = new JButton("5"); 26 b6 = new JButton("6"); 27 b7 = new JButton("7"); 28 b8 = new JButton("8"); 29 b9 = new JButton("9"); 30 b10 = new JButton("0"); 31 b11 = new JButton("."); 32 b12 = new JButton("="); 33 b13 = new JButton("+"); 34 b14 = new JButton("-"); 35 b15 = new JButton("x"); 36 b16 = new JButton("/"); 37 p2.add(b1); 38 b1.addActionListener(this); 39 p2.add(b2); 40 b2.addActionListener(this); 41 p2.add(b3); 42 b3.addActionListener(this); 43 p2.add(b13); 44 b13.addActionListener(this); 45 p2.add(b4); 46 b4.addActionListener(this); 47 p2.add(b5); 48 b5.addActionListener(this); 49 p2.add(b6); 50 b6.addActionListener(this); 51 p2.add(b14); 52 b14.addActionListener(this); 53 p2.add(b7); 54 b7.addActionListener(this); 55 p2.add(b8); 56 b8.addActionListener(this); 57 p2.add(b9); 58 b9.addActionListener(this); 59 p2.add(b15); 60 b15.addActionListener(this); 61 p2.add(b10); 62 b10.addActionListener(this); 63 p2.add(b11); 64 b11.addActionListener(this); 65 p2.add(b12); 66 b12.addActionListener(this); 67 p2.add(b16); 68 b16.addActionListener(this); 69 70 f.addWindowListener(new WindowAdapter() { 71 public void windowClosing(WindowEvent e) { 72 System.exit(0); 73 } 74 }); 75 f.setSize(200, 180); 76 f.setVisible(true); 77} 78 79double sum = 0; 80Vector v = new Vector(1, 1); 81Vector v2 = new Vector(1, 1); 82 83public Calculator() { 84 v2.addElement(new String("init")); 85 v.addElement(new String("init")); 86} 87 88public void actionPerformed(ActionEvent e) { 89 String str = tf.getText(); 90 // 加号的实现 91 if (e.getActionCommand() == "+") 92 { 93 if (("+").equals((String) v2.lastElement()) 94 || ("-").equals((String) v2.lastElement()) 95 || ("x").equals((String) v2.lastElement()) 96 || ("/").equals((String) v2.lastElement()) 97 || ("=").equals((String) v2.lastElement())) { 98 tf.setText(String.valueOf(sum)); 99 } else if (("init").equals((String) v2.lastElement())) { 100 tf.setText(String.valueOf(sum)); 101 v2.addElement(new String("=")); 102 } else { 103 double d = Double.parseDouble(str); 104 if (("+").equals((String) v.lastElement())) { 105 sum = sum + d; 106 tf.setText(String.valueOf(sum)); 107 } else if (("-").equals((String) v.lastElement())) { 108 sum = sum - d; 109 tf.setText(String.valueOf(sum)); 110 } else if (("x").equals((String) v.lastElement())) { 111 sum = sum * d; 112 tf.setText(String.valueOf(sum)); 113 } else if (("/").equals((String) v.lastElement())) { 114 sum = sum / d; 115 tf.setText(String.valueOf(sum)); 116 } else if (("=").equals((String) v.lastElement())) { 117 sum = sum + d; 118 tf.setText(String.valueOf(sum)); 119 } else { 120 sum = sum + d; 121 tf.setText(String.valueOf(sum)); 122 } 123 } 124 v.addElement(new String("+")); 125 v2.addElement(new String("+")); 126 } 127 128 // 减号的实现 129 if (e.getActionCommand() == "-") 130 { 131 if (("+").equals((String) v2.lastElement()) 132 || ("-").equals((String) v2.lastElement()) 133 || ("x").equals((String) v2.lastElement()) 134 || ("/").equals((String) v2.lastElement()) 135 || ("=").equals((String) v2.lastElement())) { 136 tf.setText(String.valueOf(sum)); 137 } else if (("init").equals((String) v2.lastElement())) { 138 tf.setText(String.valueOf(sum)); 139 v2.addElement(new String("=")); 140 } else { 141 double d = Double.parseDouble(str); 142 if (("+").equals((String) v.lastElement())) { 143 sum = sum + d; 144 tf.setText(String.valueOf(sum)); 145 } else if (("-").equals((String) v.lastElement())) { 146 sum = sum - d; 147 tf.setText(String.valueOf(sum)); 148 } else if (("x").equals((String) v.lastElement())) { 149 sum = sum * d; 150 tf.setText(String.valueOf(sum)); 151 } else if (("/").equals((String) v.lastElement())) { 152 sum = sum / d; 153 tf.setText(String.valueOf(sum)); 154 } else if (("=").equals((String) v.lastElement())) { 155 sum = sum + d; 156 tf.setText(String.valueOf(sum)); 157 } else { 158 sum = sum + d; 159 tf.setText(String.valueOf(sum)); 160 } 161 } 162 v.addElement(new String("-")); 163 v2.addElement(new String("-")); 164 } 165 166 // 乘号的实现 167 if (e.getActionCommand() == "x") 168 { 169 if (("+").equals((String) v2.lastElement()) 170 || ("-").equals((String) v2.lastElement()) 171 || ("x").equals((String) v2.lastElement()) 172 || ("/").equals((String) v2.lastElement()) 173 || ("=").equals((String) v2.lastElement())) { 174 tf.setText(String.valueOf(sum)); 175 } else if (("init").equals((String) v2.lastElement())) { 176 tf.setText(String.valueOf(sum)); 177 v2.addElement(new String("=")); 178 } else { 179 double d = Double.parseDouble(str); 180 if (("+").equals((String) v.lastElement())) { 181 sum = sum + d; 182 tf.setText(String.valueOf(sum)); 183 } else if (("-").equals((String) v.lastElement())) { 184 sum = sum - d; 185 tf.setText(String.valueOf(sum)); 186 } else if (("x").equals((String) v.lastElement())) { 187 sum = sum * d; 188 tf.setText(String.valueOf(sum)); 189 } else if (("/").equals((String) v.lastElement())) { 190 sum = sum / d; 191 tf.setText(String.valueOf(sum)); 192 } else if (("=").equals((String) v.lastElement())) { 193 sum = sum + d; 194 tf.setText(String.valueOf(sum)); 195 } else { 196 sum = sum + d; 197 tf.setText(String.valueOf(sum)); 198 } 199 } 200 v.addElement(new String("x")); 201 v2.addElement(new String("x")); 202 } 203 204 // 除号的实现 205 if (e.getActionCommand() == "/") 206 { 207 if (("+").equals((String) v2.lastElement()) 208 || ("-").equals((String) v2.lastElement()) 209 || ("x").equals((String) v2.lastElement()) 210 || ("/").equals((String) v2.lastElement()) 211 || ("=").equals((String) v2.lastElement())) { 212 tf.setText(String.valueOf(sum)); 213 } else if (("init").equals((String) v2.lastElement())) { 214 tf.setText(String.valueOf(sum)); 215 v2.addElement(new String("=")); 216 } else { 217 double d = Double.parseDouble(str); 218 if (("+").equals((String) v.lastElement())) { 219 sum = sum + d; 220 tf.setText(String.valueOf(sum)); 221 } else if (("-").equals((String) v.lastElement())) { 222 sum = sum - d; 223 tf.setText(String.valueOf(sum)); 224 } else if (("x").equals((String) v.lastElement())) { 225 sum = sum * d; 226 tf.setText(String.valueOf(sum)); 227 } else if (("/").equals((String) v.lastElement())) { 228 sum = sum / d; 229 tf.setText(String.valueOf(sum)); 230 } else if (("=").equals((String) v.lastElement())) { 231 sum = sum + d; 232 tf.setText(String.valueOf(sum)); 233 } else { 234 sum = sum + d; 235 tf.setText(String.valueOf(sum)); 236 } 237 } 238 v.addElement(new String("/")); 239 v2.addElement(new String("/")); 240 } 241 242 // 等号实现 243 if (e.getActionCommand() == "=") 244 { 245 if (("+").equals((String) v2.lastElement()) 246 || ("-").equals((String) v2.lastElement()) 247 || ("x").equals((String) v2.lastElement()) 248 || ("/").equals((String) v2.lastElement()) 249 || ("=").equals((String) v2.lastElement())) { 250 tf.setText(String.valueOf(sum)); 251 } else if (("init").equals((String) v2.lastElement())) { 252 tf.setText(String.valueOf(sum)); 253 } else { 254 double d = Double.parseDouble(str); 255 if (("+").equals((String) v.lastElement())) { 256 sum = sum + d; 257 tf.setText(String.valueOf(sum)); 258 } else if (("-").equals((String) v.lastElement())) { 259 sum = sum - d; 260 tf.setText(String.valueOf(sum)); 261 } else if (("x").equals((String) v.lastElement())) { 262 sum = sum * d; 263 tf.setText(String.valueOf(sum)); 264 } else if (("/").equals((String) v.lastElement())) { 265 sum = sum / d; 266 tf.setText(String.valueOf(sum)); 267 } else if (("=").equals((String) v.lastElement())) { 268 sum = sum + d; 269 tf.setText(String.valueOf(sum)); 270 // tf.setText(String.valueOf(sum)); 271 } else { 272 sum = sum + d; 273 tf.setText(String.valueOf(sum)); 274 } 275 } 276 v.addElement(new String("=")); 277 v2.addElement(new String("=")); 278 } 279 280 if (e.getActionCommand() == "1" || e.getActionCommand() == "2" 281 || e.getActionCommand() == "3" || e.getActionCommand() == "4" 282 || e.getActionCommand() == "5" || e.getActionCommand() == "6" 283 || e.getActionCommand() == "7" || e.getActionCommand() == "8" 284 || e.getActionCommand() == "9" || e.getActionCommand() == "0" 285 || e.getActionCommand() == ".") // 1,2,3,4,5,6,7,8,9,0,.的实现; 286 { 287 if (("+").equals((String) v2.lastElement()) 288 || ("-").equals((String) v2.lastElement()) 289 || ("x").equals((String) v2.lastElement()) 290 || ("/").equals((String) v2.lastElement()) 291 || ("init").equals((String) v2.lastElement())) { 292 tf.setText(""); 293 tf.setText(e.getActionCommand()); 294 } else if (("=").equals((String) v2.lastElement())) { 295 sum = 0; 296 tf.setText(""); 297 tf.setText(e.getActionCommand()); 298 } else { 299 tf.setText(tf.getText() + e.getActionCommand());// 调用其父类中的getText()方法 300 } 301 v2.addElement(new String(e.getActionCommand())); 302 } 303} 304 305public static void main(String args[]) { 306 new Calculator().init(); 307} 308}
1import java.awt.*; 2import java.awt.event.*; 3import javax.swing.*; 4 5public class JCalculator extends JFrame implements ActionListener { 6 /** 7 * 8 */ 9 private static final long serialVersionUID = -6675736133730301893L; 10private class WindowCloser extends WindowAdapter { 11 public void windowClosing(WindowEvent we) { 12 System.exit(0); 13 } 14} 15 16int i; 17// Strings for Digit & Operator buttons. 18private final String[] str = { "7", "8", "9", "/", "4", "5", "6", "*", "1", 19 "2", "3", "-", ".", "0", "=", "+" }; 20// Build buttons. 21JButton[] buttons = new JButton[str.length]; 22// For cancel or reset. 23JButton reset = new JButton("CE"); 24// Build the text field to show the result. 25JTextField display = new JTextField("0"); 26 27/** 28 * Constructor without parameters. 29 */ 30public JCalculator() { 31 super("计算器"); 32 // Add a panel. 33 JPanel panel1 = new JPanel(new GridLayout(4, 4)); 34 // panel1.setLayout(new GridLayout(4,4)); 35 for (i = 0; i < str.length; i++) { 36 buttons[i] = new JButton(str[i]); 37 panel1.add(buttons[i]); 38 } 39 JPanel panel2 = new JPanel(new BorderLayout()); 40 // panel2.setLayout(new BorderLayout()); 41 panel2.add("Center", display); 42 panel2.add("East", reset); 43 // JPanel panel3 = new Panel(); 44 getContentPane().setLayout(new BorderLayout()); 45 getContentPane().add("North", panel2); 46 getContentPane().add("Center", panel1); 47 // Add action listener for each digit & operator button. 48 for (i = 0; i < str.length; i++) 49 buttons[i].addActionListener(this); 50 // Add listener for "reset" button. 51 reset.addActionListener(this); 52 // Add listener for "display" button. 53 display.addActionListener(this); 54 // The "close" button "X". 55 addWindowListener(new WindowCloser()); 56 // Initialize the window size. 57 setSize(800, 800); 58 // Show the window. 59 // show(); Using show() while JDK version is below 1.5. 60 setVisible(true); 61 // Fit the certain size. 62 pack(); 63} 64 65public void actionPerformed(ActionEvent e) { 66 Object target = e.getSource(); 67 String label = e.getActionCommand(); 68 if (target == reset) 69 handleReset(); 70 else if ("0123456789.".indexOf(label) > 0) 71 handleNumber(label); 72 else 73 handleOperator(label); 74} 75// Is the first digit pressed? 76boolean isFirstDigit = true; 77/** 78 * Number handling. 79 * @param key the key of the button. 80 */ 81public void handleNumber(String key) { 82 if (isFirstDigit) 83 display.setText(key); 84 else if ((key.equals(".")) && (display.getText().indexOf(".") < 0)) 85 display.setText(display.getText() + "."); 86 else if (!key.equals(".")) 87 display.setText(display.getText() + key); 88 isFirstDigit = false; 89} 90 91/** 92 * Reset the calculator. 93 */ 94public void handleReset() { 95 display.setText("0"); 96 isFirstDigit = true; 97 operator = "="; 98} 99 100double number = 0.0; 101String operator = "="; 102 103/** 104 * Handling the operation. 105 * @param key pressed operator's key. 106 */ 107public void handleOperator(String key) { 108 if (operator.equals("+")) 109 number += Double.valueOf(display.getText()); 110 else if (operator.equals("-")) 111 number -= Double.valueOf(display.getText()); 112 else if (operator.equals("*")) 113 number *= Double.valueOf(display.getText()); 114 else if (operator.equals("/")) 115 number /= Double.valueOf(display.getText()); 116 else if (operator.equals("=")) 117 number = Double.valueOf(display.getText()); 118 display.setText(String.valueOf(number)); 119 operator = key; 120 isFirstDigit = true; 121} 122 123public static void main(String[] args) { 124 new JCalculator(); 125} 126}
程序运行结果为:

更多知识欢迎关注微信公众号“51学代码”
作者博客:https://hello1024.world (你好1024的世界)链接

