2020-12-01

学习目标:

一周内用完成简易计算器的编辑

学习内容:

1.JAVA图形页面的建立
2.计算器按键的设置
3.计算其内部算法的编辑

学习时间:

周一至周五
下午1:30~4:30

学习产出:

简易计算器的完成
代码:
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 MyCaculator extends JFrame implements ActionListener{
JTextField txtResult;
boolean firstDigit = true;//用于判断是否是数字
String operator = “=”;//先初始化为等号,等到执行相应运算时再更改
boolean operateValidFlag = true;//判断除数是否为0
double resultNum = 0.0;

public MyCaculator() {
setTitle(“计算器”);
setSize(270, 300);//长宽
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));//4行4列,行间距和列间距都是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 MyCaculator();
frame.setVisible(true);//窗体可视
}//按键

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、付费专栏及课程。

余额充值