⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calculator.java

📁 用JAVA实现的简单计算器
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/**
 * Copyright 2007 Shanghai cjy.
 * 实现windows计算器的基本功能
 * @author cjy 
 */

package mycalculator;
import java.awt.*;
import java.awt.event.*;
import java.math.*;

import javax.swing.*;

public class Calculator implements ActionListener{
	//字段:
	JFrame CalculatorFrame;                    
	JTextArea Display;							//显示数字
	JButton Button1[] = new JButton[20];		//剩下的20个按钮
	JButton Button2[] = new JButton[2];			//退格和清零按钮
	JPanel panel1,panel2,panel3;				//把整个jframe分成上中下三部分
	static final int MAX_LENGTH = 33;			//可以输入数字的最大长度
	int signalFlag = 0;							//表示当前的运算,加法为1,减法为2,乘法为3,除法为4
	boolean doubleFlag = false;					//表示输入的数是否为小数
	boolean afterSignalFlag = false;			//表示当前是否在等待输入+-*/中的一种运算符号
	boolean inputStop = false;					//在进行负数开方运算和除数为零的运算时出错,除了清零键不能按其他键
	boolean secondNumber = false;				//表示第二个运算数字是否已经输入
	boolean begin = false;						//在=,开方,%,1/x运算之后,begin变为true,如果此时输入数字,会开始新一次的运算
	boolean afterSqrt = false;					//在开方,%,1/x运算之后,afterSqrt变为true,如果此时输入数字,则新的数字会作为当前的第二个运算数,否则屏幕上的数作为第二个运算数
	BigDecimal number1 = new BigDecimal("0", new MathContext(32)); //第一个运算数
	BigDecimal number2 = new BigDecimal("0", new MathContext(32)); //第二个运算数
	
	//构造函数:
	public Calculator () {
		CalculatorFrame = new JFrame("计算器");
		CalculatorFrame.setResizable(false); 	//不能设置大小
		Display = new JTextArea("0.",1,40);		
		Display.setEditable(false);
		//按钮:
		Button1[0] = new JButton("7");	
		Button1[1] = new JButton("8");
		Button1[2] = new JButton("9");		
		Button1[3] = new JButton("/");		
		Button1[4] = new JButton("sprt");
		Button1[5] = new JButton("4");
		Button1[6] = new JButton("5");
		Button1[7] = new JButton("6");
		Button1[8] = new JButton("*");
		Button1[9] = new JButton("%");
		Button1[10] = new JButton("1");
		Button1[11] = new JButton("2");
		Button1[12] = new JButton("3");
		Button1[13] = new JButton("-");
		Button1[14] = new JButton("1/x");
		Button1[15] = new JButton("0");
		Button1[16] = new JButton("+/-");
		Button1[17] = new JButton(".");
		Button1[18] = new JButton("+");
		Button1[19] = new JButton("=");
		Button2[0] = new JButton("Backspace");
		Button2[1] = new JButton("C");
		panel1 = new JPanel (new FlowLayout());
		panel2 = new JPanel (new BorderLayout());
		GridLayout g = new GridLayout(4,5);
		g.setHgap(1);
		panel3 = new JPanel (g);		
		panel1.add(Display);
		panel2.add(Button2[0],BorderLayout.WEST);
		panel2.add(Button2[1],BorderLayout.EAST);
		for (int i = 0; i < 20; i++) {
			panel3.add(Button1[i]);
		}
		CalculatorFrame.setLayout(new BorderLayout());
		CalculatorFrame.add(panel1,BorderLayout.NORTH);
		CalculatorFrame.add(panel2,BorderLayout.CENTER);
		CalculatorFrame.add(panel3,BorderLayout.SOUTH);
		CalculatorFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	
		CalculatorFrame.pack();
		CalculatorFrame.setVisible(true);	
		
		//清零按钮:
	  	Button2[1].addActionListener(new ActionListener(){
		      public void actionPerformed(ActionEvent event){
    		      Display.setText("0.");
    		      signalFlag = 0;
    		      doubleFlag = false;
    		      afterSignalFlag = false;
    		      afterSqrt = false;
    		      begin = true;
    		      secondNumber = false;
    		      inputStop = false;
    		      number1 = number2 = BigDecimal.valueOf(0);
		      }
	  	});	
	  	//退格按钮:
	  	Button2[0].addActionListener(new ActionListener(){
	  		public void actionPerformed(ActionEvent event) {
	  			if (!inputStop && !begin) {  //只有当处在能输入的状况下,才能启动功能
	  				if (!afterSignalFlag) {	 //当按下+-*/按钮后,退格建不起作用
	  					//小数的情况:
	  					if (doubleFlag){    
	  						//最后一位为小数点时,消除小数点的作用:
	  						if(Display.getText().charAt(Display.getText().length() - 1) == '.') {
	  							doubleFlag = false;	  					
	  						}
	  						else {
	  							Display.replaceRange("", Display.getText().length()- 1, Display.getText().length());
	  						}	
	  					}
	  					//整数的退格情况:
	  					else {
	  						if (Display.getText().length() == 2 || (Display.getText().length() == 3 
	  								&&Display.getText().charAt(0) == '-')){
	  							Display.setText("0.");
	  						}
	  						else {
	  							Display.replaceRange("", Display.getText().length()- 2, Display.getText().length()- 1);
	  						}
	  					}	  					
	  				}
	  			}
	  		}
	  	});
	  	//数字键7:
	  	Button1[0].addActionListener(new ActionListener(){
	  		public void actionPerformed(ActionEvent event) {
	  			addANumber (7);
	  		}
	  	});
	  	//数字键8:
	  	Button1[1].addActionListener(new ActionListener(){
	  		public void actionPerformed(ActionEvent event) {
	  			addANumber (8);		
	  		}
	  	});
	  	//数字键9:
	  	Button1[2].addActionListener(new ActionListener(){
	  		public void actionPerformed(ActionEvent event) {
	  			addANumber (9);		
	  		}
	  	});
	  	//数字键4:
	  	Button1[5].addActionListener(new ActionListener(){
	  		public void actionPerformed(ActionEvent event) {
	  			addANumber (4);			
	  		}
	  	});
	  	//数字键5:
	  	Button1[6].addActionListener(new ActionListener(){
	  		public void actionPerformed(ActionEvent event) {
	  			addANumber (5);			
	  		}
	  	});
	  	//数字键6:
	  	Button1[7].addActionListener(new ActionListener(){
	  		public void actionPerformed(ActionEvent event) {
	  			addANumber (6);			
	  		}
	  	});
	  	//数字键1:
	  	Button1[10].addActionListener(new ActionListener(){
	  		public void actionPerformed(ActionEvent event) {
	  			addANumber (1); 			
	  		}
	  	});
	  	//数字键2:
	  	Button1[11].addActionListener(new ActionListener(){
	  		public void actionPerformed(ActionEvent event) {
	  			addANumber (2);			
	  		}
	  	});
	  	//数字键3:
	  	Button1[12].addActionListener(new ActionListener(){
	  		public void actionPerformed(ActionEvent event) {
	  			addANumber (3);			
	  		}
	  	});
	  	//数字键20:
	  	Button1[15].addActionListener(new ActionListener(){
	  		public void actionPerformed(ActionEvent event) {
	  			addANumber (0);	
	  		}
	  	});
	  	//+/-键:
	  	Button1[16].addActionListener(new ActionListener(){
	  		public void actionPerformed(ActionEvent event) {
	  			if (!inputStop){ 			//能输入的情况下
	  				if (!afterSignalFlag) { //在输入+-*/号后不能按下此键
	  					//当前数字为0时不起作用:
	  					if (!new BigDecimal(Display.getText()).equals(BigDecimal.ZERO)) {
	  						if (Display.getText().charAt(0) == '-') {
	  							Display.replaceRange("",0,1);             //为负数的话去掉负号
	  						}
	  						else {
	  							Display.setText("-" + Display.getText()); //为正书的话加上正号:
	  						}
	  					}
	  				}	
	  				if (secondNumber) {
	  					number2 = new BigDecimal(Display.getText());      //若此时的数为第二个运算数,则改变number2
	  				}
	  			}
	  		}
	  	});
	  	//小数点键:
	  	Button1[17].addActionListener(new ActionListener(){
	  		public void actionPerformed(ActionEvent event) {
	  			if (!inputStop) {                 //在能输入的情况下
	  				if (begin) {				  //在进行一次新的运算的情况下:
	  					Display.setText("0.");			
	  					signalFlag = 0;
	  					doubleFlag = true;
	  					afterSignalFlag = false;
	  					secondNumber = false;
	  					begin = false;	
	  					afterSqrt = false;
	  				}
	  				else {						  
	  					if (!afterSignalFlag) {	   
	  						doubleFlag = true;
	  					}
	  					else {
	  						doubleFlag = true;
	  						Display.setText("0.");
	  						number2 = new BigDecimal(Display.getText());
	  						afterSignalFlag = false;
	  						secondNumber = true;
	  					}
	  				}
	  			}
	  		}
	  	});
	  	//sqrt开方键:
	  	Button1[4].addActionListener(new ActionListener(){
	  		public void actionPerformed(ActionEvent event) {
	  			if (!inputStop) {    //在能输入的情况下
	  				try {			 
	  					//若当前的数为负数,则抛出异常:
	  					if (new BigDecimal(Display.getText()).compareTo(BigDecimal.ZERO) == -1) {	  						
	  						throw new NumberException ();
	  					}	  					
	  					//把当前的数转换为浮点数进行开放运算:
	  					double d = java.lang.Math.sqrt(new BigDecimal(Display.getText()).doubleValue());	  					
	  					Display.setText(output(new BigDecimal(d, new MathContext(32))));		  					

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -