java 制作小计算器

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;					//将用于表示运算符的变量设置为0
			newDigital = 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();

	}
	

}

这个是一个小计算器

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


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

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


你可能感兴趣的:(Java入门,java,Java,JAVA,java,小计算器)