java 制作小计算器

来源:互联网 发布:淘宝卖家工具大全 编辑:程序博客网 时间:2024/04/28 17:47
package JavaAplication;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Container;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JTextField;public class Calculation extends JFrame implements ActionListener {private JTextField txfResult; //定义用于显示操作结果文本框private JTextField txfM;//定义显示记忆的索引值的文本框Double dM = 0d;//定义用于存储的数据 private boolean newDigital = true; //用于表示是否是输入的数的标志 private double d;//创建用于进行一元运算的变量private double d1;//创建用于进行二元运算的前操作数private double d2;//创建用于进行二元运算的后操作数private int optionValue;//创建用于区别加减乘除运算符的变量public Calculation(){super("swing计算器实例");/* 设置用于显示运算结果的文本框 */txfResult = new JTextField("0", 30);//创建用于显示操作结果文本框txfResult.setEditable(false);//设置不可编辑 txfResult.setBackground(Color.white); //设置文本框颜色 txfResult.setHorizontalAlignment(JTextField.RIGHT); //设置数组在文本框显示位置 JPanel ResultTextPanel = new JPanel();//创建用于存放显示操作结果文本框的面板ResultTextPanel.add(txfResult);//将显示操作结果文本框放入面板中/*设置用于控制数字的数字键与显示记忆的索引值的文本框 */txfM=new JTextField(2);//创建显示记忆的索引值的文本框 JButton b1 = new JButton("Backspace"); //创建 Backspace键 JButton b2 = new JButton("CE"); //创建 CE键 JButton b3 = new JButton("C"); //创建 C键 JPanel ControlPanel = new JPanel();//创建用于存放面板的控制键ControlPanel.setLayout(new GridLayout(1, 4, 2, 2));//设置网格布局管理器ControlPanel.add(txfM);//将显示记忆的索引值的文本框放入到面板中ControlPanel.add(b1);//将Backspace键放入到面板中ControlPanel.add(b2);//将CE键放入到面板中ControlPanel.add(b3);//将C键放入到面板中b1.addActionListener(this);//向Backspace键添加监听方法b2.addActionListener(this);//向CE键添加监听方法b3.addActionListener(this);//向C键添加监听方法/* 设置数字和运算符键 */String dcKey[] = { "MC","7", "8", "9", "/", "sqrt", "MR","4", "5", "6", "*", "%","MS","1", "2", "3", "-", "1/x","M+", "0", "+/-", ".", "+", "=" };JPanel dcKeyPanel = new JPanel();//创建用于存放数字和运算符键的面板dcKeyPanel.setLayout(new GridLayout(4, 6, 2, 2));//设置网格布局管理器for (int i = 0; i < 24; i++) {//以数组的长度做为循环条件JButton b = new JButton(dcKey[i]);//创建数字和运算符键按钮dcKeyPanel.add(b);//将数字和运算符键按钮放入到布局管理器中b.addActionListener(this); //向数字和运算符键添加监听方法}Container ct = this.getContentPane();//窗体的内容面板对象ct.setLayout(new BorderLayout());//设置边界布局管理器ct.add(ResultTextPanel, BorderLayout.NORTH);//将显示结果文本框放到窗体的上部ct.add(ControlPanel, BorderLayout.CENTER);//将控制键放入到窗体中央ct.add(dcKeyPanel, BorderLayout.SOUTH);//将数字和运算符键放入到窗体的下部pack();//调整此窗口的大小setVisible(true); // 设置窗体是否显示setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置窗体关闭的处理方式}public void actionPerformed(ActionEvent e) {String s = (e.getActionCommand());//返回与此动作相关的命令字符串String str = txfResult.getText();//获取文本框中的字符串/*后退键*/if (s.equals("Backspace")) {String s1 = str ;//获取文本框中的字符串txfResult.setText(s1.substring(0, s1.length() - 1));//截取最后一个数字}/*重置键*/if (s.equals("CE") ) {txfResult.setText("0");// 把显示屏清零newDigital = true;//将表示是否是新输入的数的标设置为true}/*清零键*/if (s.equals("C")) {txfResult.setText("0");// 把显示屏清零optionValue =0;//将用于表示运算符的变量设置为0newDigital = true;//将表示是否是新输入的数的标设置为true}/*数字键*/if (s.equals("0") || s.equals("1") || s.equals("2") || s.equals("3")|| s.equals("4") || s.equals("5") || s.equals("6")|| s.equals("7") || s.equals("8") || s.equals("9")) {if (!newDigital)//判断是否是新数txfResult.setText(str + s);//获取文本框中的字符串else {txfResult.setText(s);//设置文本框中的字符串newDigital = false;//将是否为新数的标志设置为false}return;}/*小数点*/if (s.equals(".")) {if (txfResult.getText().indexOf(".") == -1){ //如果不存在小数点/*判断数字是否以0开头*/if (txfResult.getText().trim().startsWith("0")) {txfResult.setText("0.");//设置文本框中的字符串newDigital = false;//将是否为新数的标志设置为false} else{txfResult.setText(str + ".");//设置文本框中的字符串}}return;}/* 表示数字正负符号+/- */if (s.equals("+/-")) {d = Double.parseDouble(str.trim());//获取输入的数字txfResult.setText(String.valueOf((-d)));//取得获取输入数字的相反数return;}newDigital = true; /*“+”号运算符*/if (s.equals("+")) {d1 = Double.parseDouble(txfResult.getText());//获取前操作数的值optionValue = 1;//设置运算符标志}/*“-”号运算符*/if (s.equals("-")) {d1 = Double.parseDouble(txfResult.getText());//获取前操作数的值optionValue = 2;//设置运算符标志}/*“*”号运算符*/if (s.equals("*")) {d1 = Double.parseDouble(txfResult.getText());//获取前操作数的值optionValue = 3;//设置运算符标志}/*“/”号运算符*/if (s.equals("/")) {d1 = Double.parseDouble(txfResult.getText());//获取前操作数的值optionValue = 4;//设置运算符标志}/* 等号运算符 */if (s.equals("=")) {d2 = Double.parseDouble(txfResult.getText());//获取后操作数的值/*根据运算符标志的不同值确定计算结果*/switch (optionValue) {case 1:txfResult.setText(String.valueOf(d1 + d2));//加法运算break;case 2:txfResult.setText(String.valueOf(d1 - d2));//减法运算break;case 3:txfResult.setText(String.valueOf(d1 * d2));//乘法运算break;case 4:if (d2!=0){txfResult.setText(String.valueOf(d1 / d2));//除法运算}else{txfResult.setText("除数不能为0");//如果该值为0不能进行除法运算return;}break;}optionValue = 0;//清空运算符}/*根号运算*/if (s.equals("sqrt")) {d = Double.parseDouble(txfResult.getText().trim());//获取操作数的值if (d >= 0) {txfResult.setText(String.valueOf((Math.sqrt(d))));//计算该值的平方根} else {txfResult.setText("负数不能计算平方根");//如果该值为负数或者0不能计算平方根}/*倒数运算*/} else if (s.equals("1/x")) {d = Double.parseDouble(txfResult.getText().trim());//计算该值的倒数if (str.equals("0")) {txfResult.setText("除数不能为0");//如果该值为0不能计算倒数} else {txfResult.setText(String.valueOf((1 / d))); //计算该值求倒数 }/*百分号运算符*/} else if (s.equals("%")) {txfResult.setText(String.valueOf((Double.parseDouble(str) / 100)));//计算该值的百分数}/*清除内存*/if(s.equals("MC")){ txfM.setText("");//将显示记忆的索引值的文本框设置为空 dM=0d;newDigital = true;//将表示是否是新输入的数的标设置为true }/*/重新调用存储的数据*/ if(s.equals("MR")){  if(txfM.getText().trim()!=""){   txfResult.setText(""+dM); //显示存储的数据 } } /*存储显示的数据*/  if(s.equals("MS")){   dM=Double.parseDouble(txfResult.getText().trim()); //存储文本框中显示的数据  txfM.setText("M"); //将显示记忆的索引值的文本框显示M }  /*将显示的数字与已经存储的数据相加*/  if(s.equals("M+")){  dM=dM+Double.parseDouble(txfResult.getText().trim()); //将显示的数字与已经存储的数据相加  }}public static void main(String[] args) {new Calculation();}}

这个是一个小计算器

主要是参考书和网上的教学视频,做的第一个计算器的功能比较简单截图如下:


后来在网上找到教学视频,就按照他一步一步做的这个报告中的计算器,

这个计算器实现连加连减和开根号和一系列记忆功能。因为有参考的教程所以没有遇到困难,在学习期间查阅很多书看对该部分知识有了比较系统的掌握。


原创粉丝点击