编写一个简单的计算器使用图形用户界面
2015-05-03 13:45
423 查看
1 package com.lovo.calculator; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; /** * 计算器类 * * @author Administrator * */ public class Calculator extends JFrame implements ActionListener { private static final long serialVersionUID = 3868243398506940702L; // 文本框 private JTextField result; // 按钮数组 private JButton[] buttons; // 按钮文本 private final String[] characters = { "7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", "0", ".", "=", "+" }; // 是否为第一个输入的数字 private boolean isFirstDigit = true; // 运算结果 private double resultNum = 0.0; // 运算符 private String operator = "="; public Calculator(String title) { // 设置标题栏 super(title); // 初始化各组件 init(); // 注册各组件监听器 registerListener(); // 显示窗体 setVisible(true); } /** * 初始化各组件 */ private void init() { // 常用属性初始化 setSize(220, 200); setResizable(false); setLocationRelativeTo(null); setDefaultCloseOperation(EXIT_ON_CLOSE); /* 文本框对象初始化 */ result = new JTextField("0"); // 文本右对齐 result.setHorizontalAlignment(JTextField.RIGHT); // 设置是否可编辑 result.setEditable(false); /* 按钮初始化 */ buttons = new JButton[characters.length]; for (int i = 0; i < buttons.length; i++) { buttons[i] = new JButton(characters[i]); buttons[i].setFocusable(false); // 不允许按钮定位焦点 } /* 将文本框与按钮添加到窗体中 */ add(result, BorderLayout.NORTH); JPanel pnl = new JPanel(new GridLayout(4, 4, 5, 5)); for (JButton jButton : buttons) { pnl.add(jButton); } add(pnl); this.getContentPane().setFocusable(true); } /** * 注册监听器 */ private void registerListener() { for (JButton jButton : buttons) { jButton.addActionListener(this); } // 注册键盘事件 this.getContentPane().addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { String text = String.valueOf(e.getKeyChar()); if (Character.isDigit(text.charAt(0)) || ".".equals(text)) { // 数字或小数点 handleNumber(text); } else if ("+-*/=".indexOf(text) != -1) { // 运算符 handleOperator(text); } else if (e.getKeyCode() == 8) { // 退格键 String tmp = result.getText().trim(); if (tmp.length() == 1) { result.setText("0"); isFirstDigit = true; } else { result.setText(tmp.substring(0, tmp.length() - 1)); } } } }); } @Override public void actionPerformed(ActionEvent e) { JButton btn = (JButton) e.getSource(); String text = btn.getText().trim(); if (Character.isDigit(text.charAt(0)) || ".".equals(text)) { // 处理数字和小数点 handleNumber(text); } else { // 处理运算符 handleOperator(text); } } /** * 处理数字和小数点 * * @param text */ private void handleNumber(String text) { if (isFirstDigit) { // 第一次输入 if (".".equals(text)) { this.result.setText("0."); } else { this.result.setText(text); } } else if ("0".equals(text) && "0".equals(this.result.getText())) { isFirstDigit = true; return; } else if (".".equals(text) && this.result.getText().indexOf(".") == -1) { this.result.setText(this.result.getText() + "."); } else if (!".".equals(text)) { this.result.setText(this.result.getText() + text); } isFirstDigit = false; } /** * 处理运算符 * * @param text */ private void handleOperator(String text) { switch (operator) { // 处理各项运算 适用于JDK1.7版本的 case "+": resultNum += Double.parseDouble(this.result.getText()); break; case "-": resultNum -= Double.parseDouble(this.result.getText()); break; case "*": resultNum *= Double.parseDouble(this.result.getText()); break; case "/": resultNum /= Double.parseDouble(this.result.getText()); break; case "=": resultNum = Double.parseDouble(this.result.getText()); break; } // 将文本框的值修改为运算结果 this.result.setText(String.valueOf(resultNum)); // 将点击的运算符放入operator保存 operator = text; // 下一个数字第一次点击 isFirstDigit = true; } }
测试类
package com.lovo.calculator; public class Test { public static void main(String[] args) { new Calculator("My Calculator"); } }
相关文章推荐
- 如何使用JS编写一个简单的计算器
- 使用JSP制作一个超简单的网页计算器的实例分享
- 使用JSP制作一个超简单的网页计算器的实例分享
- 8、ROS使用C++编写一个简单的Publisher和Subscriber
- 9、ROS使用C++编写一个简单的Service和Client
- 使用Eclipse编写一个简单的Hello World
- 使用libevent和boost编写一个简单的tcp服务器
- 使用过滤器+反射+枚举,简单模拟sturts2运行方式,编写一个属于自己的框架
- java学习笔记之使用MyEclipse编写一个简单的登陆界(一)
- 教你如何使用java语言编写一个简单的SqlHelper类
- [入门教程]使用Cocos2d-html5游戏引擎编写一个简单的游戏 第一回合: 搭建开发环境
- Stuts2 使用DispatchAction做一个简单的计算器
- 使用ATL编写一个简单的COM服务器
- 自己编写的一个简单的计算器
- Servlet学习笔记_03_使用servlet编写一个简单的helloworld程序
- 使用Java编写一个简单的Web的监控系统
- JAVA编写的一个简单的计算器
- 使用Poco库编写一个简单的http客户端原理
- 使用Python编写一个简单的tic-tac-toe游戏的教程
- 使用Tkinter编写一个简单的提醒小程序