关于计算器的简单实现

原创 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");
}
}


计算器简单实现

var flag = true;   function getNum(num){     if(!flag){     document.getElementById('res').value ...
  • qq1355541448
  • qq1355541448
  • 2013年02月27日 20:31
  • 510

计算器算法的简单实现

无聊写着玩玩,分享,共g
  • zhurongboyitu
  • zhurongboyitu
  • 2015年06月12日 13:21
  • 203

安卓简单加法计算器

界面上有两个输入框,默认值为0,一个文本输出框,一个按钮;输入数字后点击Button计算; xml中输入框有个属性android:inputType=”number”记得注意下。 代码如下:pri...
  • grizzly_bear
  • grizzly_bear
  • 2017年03月18日 19:50
  • 508

javascrip 计算器的简单实现

"> My JSP 'index.jsp' startin
  • qq_28316183
  • qq_28316183
  • 2017年09月18日 09:34
  • 178

模拟计算器的简单实现

一.为什仫要实现大数运算? 我们知道在数学领域中,数值的大小是没有上限的,但是计算机中,由于字长的限制,计算机所能表示的范围是有限的,当我们在实际的应用中进行大量的数据处理的时候,会发现参与运算的数...
  • ONEDAY_789
  • ONEDAY_789
  • 2017年06月05日 18:20
  • 758

Java实现栈之计算器

Java实现栈来做一个将中缀表达式转化为后缀表达式的程序,中缀表达式更符合我们的主观感受,后缀表达式更适合计算机的运算,下面直接上代码吧:package Character1;import java....
  • Marksinoberg
  • Marksinoberg
  • 2015年10月23日 23:32
  • 7552

iOS实现带历史记录功能的计算器

最近想检验一下自己学习iOS3个月以来知识的掌握情况,所以决定自己动手编写一个简单的计算器app。考查了市面上的大多数计算器应用,发现都不能满足“回顾之前的计算结果”的功能,而我觉得这个功能还挺有需求...
  • shiftsheep
  • shiftsheep
  • 2015年09月10日 21:35
  • 3258

C#实现简单的加减乘除计算器

第一次学习C#,做了个简单的加减乘除计算器,只能实现两个因数的运算。 主要是练习下C#编程,和以前用过的VB差不多。与VB6不同的是,C#代码区分大小写。 Windows窗口程序主要也是由一些控件...
  • ameyume
  • ameyume
  • 2012年11月17日 21:02
  • 18187

js简单实现计算器

js-计算器 var clearmsg=false; //获取点击获得的参数 function getNum(num){ var objResult = document....
  • php_897721669
  • php_897721669
  • 2012年02月27日 20:33
  • 1676

数据结构--简单实现计算器

数据结构--简单实现计算器 中缀表达式转为后缀表达式实现计算器
  • gebushuaidanhenhuai
  • gebushuaidanhenhuai
  • 2017年03月17日 22:43
  • 176
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于计算器的简单实现
举报原因:
原因补充:

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