import java.awt.BorderLayout;_import java.awt.BorderLayout;

import java.awt.BorderLayout;

import java.awt.Container;

import java.awt.Font;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.Arrays;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JTextField;

public class Calculator extends JFrame implements ActionListener {

// 属性

JTextField txtResult;

boolean firstDigit = true;//用于判断是否是数字

String operator = "=";//先初始化为等号,等到执行相应运算时再更改

boolean operateValidFlag = true;//判断除数是否为0

double resultNum = 0.0;//可以暂存目前的最终结果

// 方法

public Calculator() {

setTitle("计算器");

setSize(240, 270);

setResizable(false);

setLocationRelativeTo(null);

setDefaultCloseOperation(EXIT_ON_CLOSE);

Container contentPane = this.getContentPane();

contentPane.setLayout(new BorderLayout(1, 5));

JPanel pnlNorth = new JPanel();

JPanel pnlCenter = new JPanel();

pnlNorth.setLayout(new BorderLayout());

pnlCenter.setLayout(new GridLayout(4, 4, 3, 3));

Font font = new Font("Times Roman", Font.BOLD, 20);

contentPane.add(BorderLayout.NORTH, pnlNorth);

contentPane.add(BorderLayout.CENTER, pnlCenter);

txtResult = new JTextField();

txtResult.setFont(font);

txtResult.setEnabled(false);

JButton btnClear = new JButton("C");

btnClear.setFont(font);

btnClear.addActionListener(this);

pnlNorth.add(BorderLayout.CENTER, txtResult);

pnlNorth.add(BorderLayout.EAST, btnClear);

String[] captions = { "7", "8", "9", "+", "4", "5", "6", "-", "1", "2", "3", "*", "0", ".", "/", "=", };

for (int i = 0; i < captions.length; i++) {

JButton btn = new JButton(captions[i]);

btn.setFont(font);

pnlCenter.add(btn);

btn.addActionListener(this);

}

}

public static void main(String[] args) {

JFrame frame = new Calculator();

frame.setVisible(true);

}

//对按钮进行的反应

@Override

public void actionPerformed(ActionEvent event) {

String label = event.getActionCommand();

if (label.equals("C") ){

handleC();

} else if ("0123456789.".indexOf(label) >= 0) {

//无论整数还是小数都一起提取出来

handleNumber(label);

} else {

//将当前要执行的运算的运算符赋给operator

handleOperator(label);

}

}

//提取数字

void handleNumber(String key) {

if (firstDigit) {

txtResult.setText(key);//在文本框中显示数字的字符串

} else if ((key.equals(".")) && (txtResult.getText().indexOf(".") < 0)) {

txtResult.setText(txtResult.getText() + ".");//在文本框中显示整数数字的字符串

} else if (!key.equals(".")) {

txtResult.setText(txtResult.getText() + key);//在文本框中显示整数数字的字符串

}

firstDigit = false;//当数字显示完之后,即可重置为false

}

//实现清零

void handleC() {

txtResult.setText("0");

firstDigit = true;

operator = "=";

}

//进行运算

void handleOperator(String key) {

if (operator.equals("/")) {

//判断除数是否为0

if (getNumberFromText() == 0.0) {

//以下代码很关键,不做多余说明,每次看都有不同的理解

operateValidFlag = false;

txtResult.setText("除数不能为零");

} else {

resultNum /= getNumberFromText();

}

} else if (operator.equals("+")) {

resultNum += getNumberFromText();

} else if (operator.equals("-")) {

resultNum -= getNumberFromText();

} else if (operator.equals("*")) {

resultNum *= getNumberFromText();

} else if (operator.equals("=")) {

resultNum = getNumberFromText();

}

if (operateValidFlag) {

long t1;

double t2;

t1 = (long) resultNum;

t2 = resultNum - t1;

if (t2 == 0) {

txtResult.setText(String.valueOf(t1));

} else {

txtResult.setText(String.valueOf(resultNum));

}

}

operator = key;

firstDigit = true;

operateValidFlag = true;

}

double getNumberFromText() {

double result = 0;

try {

result = Double.valueOf(txtResult.getText()).doubleValue();//把String转化成Double类型的对象,并求double的原始值

} catch (NumberFormatException e) {

}

return result;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值