JAVA实现简单的计算器

注意:做实验发现网上许多简单的计算器都存在问题,所以自己做了一个相对完善的简单计算器,当然了他还是很简单,但是修复了网上一些漏洞,新加了点功能。

修复的问题:1.当连续点两次运算符时,会不断叠算。

                   2.运算点了之后即运算,本计算器将选择最后一次运算符作为运算。

                   3.增加了E功能。

图例:

JAVA实现简单的计算器

详细代码:


package ttt;


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class Calculator extends JFrame implements ActionListener{
    JButton reset = new JButton("CE");
    JButton reset_once = new JButton("E");
    JTextField display = new JTextField("0");
    public Calculator() {
    //设置名称,大小
    this.setTitle("张广岩的计算器");
this.setSize(304, 200);
//将E和CE左右放一起作为panel0
JPanel panel0 = new JPanel(new BorderLayout());
panel0.add("Center", reset_once);
panel0.add("East", reset);
//将文本框panel0左右放一起作为panel1,形成了界面的第一行
JPanel panel1 = new JPanel(new BorderLayout());
panel1.add("Center", display);
panel1.add("East", panel0);
//分成4*4框架,分别放入按钮
JPanel panel2 = new JPanel(new GridLayout(4, 4));
String[] str = { "7", "8", "9", "/", "4", "5", "6", "*", "1",
           "2", "3", "-", ".", "0", "=", "+" };
    JButton[] buttons = new JButton[str.length];
    int i;
for (i = 0; i < str.length; i++) {
buttons[i] = new JButton(str[i]);
panel2.add(buttons[i]);
}
//将panel1和panel2上下放一起,形成完整界面
getContentPane().setLayout(new BorderLayout());
getContentPane().add("North", panel1);
getContentPane().add("Center", panel2);
//每个按钮的功能设置
for (i = 0; i < str.length; i++)
buttons[i].addActionListener(this);
reset.addActionListener(this);
reset_once.addActionListener(this);
display.addActionListener(this);

setVisible(true);
    }  
   //按钮点击后将进入此功能函数,此函数是获取按钮信息,根据信息判断按钮作用,进入相应功能函数
    public void actionPerformed(ActionEvent e) {
       Object target = e.getSource();
       String label = e.getActionCommand();
       if (target == reset_once)
       handleReset_once();
       else if (target == reset)
           handleReset();
       else if ("0123456789.".indexOf(label) >= 0)
           handleNumber(label);
       else
           handleOperator(label);
    }
    
    boolean isFirstDigit = true;
    double number = 0.0;
    String operator = "=";
    //E功能
    public void handleReset_once() {
        display.setText("0");
        isFirstDigit = true;
    }
    //CE功能
    public void handleReset() {
        display.setText("0");
        isFirstDigit = true;
        operator = "=";
    }
    //数字和点的功能
    public void handleNumber(String key) {
       if (isFirstDigit)
           display.setText(key);
       else if ((key.equals(".")) && (display.getText().indexOf(".") < 0))
           display.setText(display.getText() + ".");
       else if (!key.equals("."))
       display.setText(display.getText() + key);
       isFirstDigit = false;
    }
    //运算符功能
    public void handleOperator(String key) {
    if (isFirstDigit)
       operator = key;
    else {
       if (operator.equals("+"))
       number += Double.valueOf(display.getText()); 
       else if (operator.equals("-"))
       number -= Double.valueOf(display.getText()); 
       else if (operator.equals("*"))
       number *= Double.valueOf(display.getText()); 
       else if (operator.equals("/")) 
       number /= Double.valueOf(display.getText()); 
       else if (operator.equals("=")) 
       number = Double.valueOf(display.getText());
       display.setText(String.valueOf(number));
       operator = key;
       isFirstDigit = true;
       }
    }
   //运行此计算器
    public static void main(String[] args) {
       new Calculator();
    }
}