关于计算器的简单实现

原创 2015年07月09日 23:41:09

JAVA简单的实现计算器的功能可以选择用窗体来写,具体步骤如下:

1.建立一个计算器Calculator 的实体类继承 JFrame ,实现ActionListener 的接口。在类中定义实现需要的常量变量,构造器中书写窗体

2书写一个方法 初始化文本框与按钮,生成界面,重写actionPerformed方法,注册监听器

3.书写方法,实现运算

4.建立一个测试类测试代码

具体代码如下:

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 = 2499964079704437558L;
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 String operator = "="; // 运算符
private double resultNum = 0.0; // 运算结果

public Calculator(String title) {
// 标题栏
super(title);
// 大小
setSize(220, 200);
// 居中
setLocationRelativeTo(null);
// 默认关闭操作
setDefaultCloseOperation(EXIT_ON_CLOSE);
// 禁止修改大小
setResizable(false);
// 初始化文本框与按钮
generateInterface();
// 显示
setVisible(true);
}


/**
* 初始化文本框与按钮,生成界面
*/
private void generateInterface() {
/* 文本框 */
result = new JTextField("0");
// 右对齐
result.setHorizontalAlignment(JTextField.RIGHT);
// 不允许编辑
result.setEditable(false);
// 将文本框添加到窗体北方
add(result, BorderLayout.NORTH);


/* 按钮 */
buttons = new JButton[characters.length];
JPanel pnl = new JPanel(new GridLayout(4, 4, 5, 5));
for (int i = 0; i < buttons.length; i++) {
buttons[i] = new JButton(characters[i]);
buttons[i].addActionListener(this);
buttons[i].setFocusable(false); // 不允许按钮定位焦点
pnl.add(buttons[i]);
}
// 将所有按钮添加到窗体的中间
add(pnl, BorderLayout.CENTER);


// 允许内容面板定位焦点
this.getContentPane().setFocusable(true);


// 注册内容面板事件监听器
// 适配器
this.getContentPane().addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
char ch = e.getKeyChar(); // 获取按钮字符
/* 处理数字或运算符 */
if ('.' == ch || Character.isDigit(ch)) { // 数字小数点
handleNumber(String.valueOf(ch));
} else if ("+-*/=".indexOf(ch) != -1 || e.getKeyCode() == 10) { // 运算符
handleOperator(String.valueOf(ch));
} else if (e.getKeyCode() == 8) { // 退格键
String tmp = result.getText();
if (tmp.length() == 1) {
result.setText("0");
isFirstDigit = true;
} else {
result.setText(tmp.substring(0, tmp.length() - 1));
}
}
}
});
}


@Override
public void actionPerformed(ActionEvent e) {


// 获取点击按钮的文本
String text = e.getActionCommand();


/* 处理数字或运算符 */
if (".".equals(text) || Character.isDigit(text.charAt(0))) { // 数字小数点
handleNumber(text);
} else if ("+-*/=".indexOf(text) != -1) { // 运算符
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())) { // 第二次或多次输入0
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) {
char ch = operator.charAt(0);
switch (ch) {
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));
// 将参数运算符放入成员变量中
this.operator = text;
// 下一个数字是第一次输入
isFirstDigit = true;
}
}

/**
 * 测试类
 * @author Administrator
 *
 */
public class Test {


public static void main(String[] args) {
new Calculator("My Calculator");
}
}


相关文章推荐

jsp实现一个简单的计算器

计算器 function checkNum(){ // alert("1");alert("0"); if(document.form1.num1...
  • yaoyy09
  • yaoyy09
  • 2012年12月29日 19:35
  • 9717

【IOS开发】IOS开发新手入门--简单计算器实现

编程语言基础:objective-c基础语法 编程工具:Xcode4.6 第一步:打开Xcode,选择下面的Create a new Xcode projectd 第二步:选中如图,点Nex...

C# 一步一步完成一个简单的计算器 第三步---实现双目运算

实现双目运算是这个系列中难道较大的,基本都是在写代码,在一些函数中相互调用,修改变量,可能比较绕, 1.首先打开代码文本,在类的里面 声明几个变量 private bool isFi...

《简单计算器实现(c#)》

using System; usingSystem.Collections.Generic; usingSystem.ComponentModel; using System.Data; using ...

JSP+JavaBean实现简单计算器

实验5 JavaBean创建和使用 一、实验目的 1、掌握JavaBean创建和使用方法; 2、领会JavaBean简化页面设计的优势等。 二、实验内容 1、设计诸如以下页面的简单计算器 ...

Android 简单计算器的实现

计算器计算器App看似简单,实现起来却是不那么简单。对于android新手来说,计算器是一个很好的练手的小项目。对于android的一些基础知识和一些算法逻辑是一个很好的锻炼。功能基本计算器的加减乘除...

JAVA Swing实现简单的体重指数(BMI)计算器

本文通过运用Java Swing实现了一个简单的BMI计算器。

不带有界面的简单的计算器小程序(Java语言实现)

在看《大话设计模式》这本书,在开篇的第一部分介绍面向对象时候,介绍了一位童鞋面试时面试官让他使用面向对象语言实现一个简单的计算器,然而这位同学却没能很好地理解考官的意思,导致面试失败。那么如何使用Ja...

Python Tkinter实现的简单计算器

使用Python的Tkinter实现很简单的计算器

设计模式之一:简单工厂模式,用python实现简易计算器

设计模式之一:简单工厂模式,用python实现简易计算器听说写技术博客对别人对自己都有好处,于是从这里开始写第一篇博客,记录自己的学习历程。由于编程功底很薄弱(对于代码的不足或错误,欢迎大家批评指正)...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于计算器的简单实现
举报原因:
原因补充:

(最多只允许输入30个字)