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

📄 calculator.java

📁 用Java实现的一款计算器程序
💻 JAVA
字号:
/**
 * @(#)Calculator.java
 *
 *
 * @author ehtPossible高则宝 061251032
 * @version 1.00 2007/5/29
 */
 
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JPanel;
import javax.swing.*;

public class Calculator extends JFrame implements ActionListener{
	//定义面板上的各种JButton、JradioButton、TextField
	JRadioButton jrbHex = new JRadioButton("Hex");
	JRadioButton jrbDec = new JRadioButton("Dec");
	ButtonGroup group1 = new ButtonGroup();
	
	JRadioButton jrbRad = new JRadioButton("Radian");
	JRadioButton jrbAng = new JRadioButton("Angle");
	ButtonGroup group2 = new ButtonGroup();

	JButton jbtBackSpace= new JButton("BackSpace");
	JButton jbtC1 = new JButton("C");
  	JButton[] jbtArray1 = {jbtBackSpace, jbtC1};
	
	JButton jbt1 = new JButton("1");   JButton jbt2 = new JButton("2");   JButton jbt3 = new JButton("3");
	JButton jbt4 = new JButton("4");   JButton jbt5 = new JButton("5");   JButton jbt6 = new JButton("6");
	JButton jbt7 = new JButton("7");   JButton jbt8 = new JButton("8");   JButton jbt9 = new JButton("9");
	JButton jbtA = new JButton("A");   JButton jbt0 = new JButton("0");   JButton jbtPoint = new JButton(".");
	JButton jbtB = new JButton("B");   JButton jbtC = new JButton("C");   JButton jbtD = new JButton("D");
	JButton[] jbtArray2 = {jbt7, jbt8, jbt9, jbt4, jbt5, jbt6, jbt1, jbt2, jbt3, jbtA, jbt0, jbtPoint, jbtB, jbtC, jbtD};
	
	JButton jbtDiv = new JButton("/");  JButton jbtMod = new JButton("mod");  JButton jbtMul = new JButton("*");
	JButton jbtFac = new JButton("n!");  JButton jbtMin = new JButton("-");   JButton jbtRec = new JButton("1/x");
	JButton jbtPlu = new JButton("+");   JButton jbtEqu = new JButton("=");   JButton jbtE = new JButton("E");
	JButton jbtF = new JButton("F");
	JButton[] jbtArray3 = {jbtDiv, jbtMod, jbtMul, jbtFac, jbtMin, jbtRec, jbtPlu, jbtEqu, jbtE, jbtF};
	
	JButton jbtPow = new JButton("x^y"); JButton jbtBracket1 = new JButton("("); JButton jbtBracket2 = new JButton(")");
	JButton jbtLn = new JButton("ln");   JButton jbtLg = new JButton("lg");    JButton jbtExp = new JButton("exp");
	JButton jbtSqu = new JButton("x^2"); JButton jbtCub = new JButton("x^3");    JButton jbtSqrt = new JButton("sqrt");
	JButton jbtSin = new JButton("sin"); JButton jbtCos = new JButton("cos");    JButton jbtE2 = new JButton("e");
	JButton jbtTan = new JButton("tan"); JButton jbtCot = new JButton("cot");    JButton jbtPi = new JButton("pi");
	JButton[] jbtArray4 = {jbtPow, jbtBracket1, jbtBracket2, jbtLn, jbtLg, jbtExp, jbtSqu, jbtCub, jbtSqrt, jbtSin, jbtCos, jbtE2, jbtTan, jbtCot, jbtPi};
	
	JButton[] jbtHex = {jbtA, jbtB, jbtC, jbtD, jbtE, jbtF};
	
	JTextField jtfMessage = new JTextField(10);

    int NUM_OF_OPERAND = 0;
	
	//主函数
	public static void main(String[] args){
		Calculator frame = new Calculator();
		frame.setTitle("Calculator");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(450,260);
		frame.setVisible(true);
	}
	
	//Calculate类处理计算读入的字符串,创建其对象
	Calculate cal = new Calculate();
	public Calculator(){
		
		group1.add(jrbHex);  group1.add(jrbDec);
		group2.add(jrbRad);  group2.add(jrbAng);
		
		JPanel p0 = new JPanel();
		p0.setLayout(new FlowLayout());
		p0.add(jrbHex);  p0.add(jrbDec);
		
		JPanel p00 = new JPanel();
		p00.setLayout(new FlowLayout());
		p00.add(jrbRad);  p00.add(jrbAng);
		
		JPanel p1 = new JPanel();
	    p1.setLayout(new FlowLayout());
	    for(int i = 0; i < 2; i++){
	    	p1.add(jbtArray1[i]);
	    }
	    
	    JPanel p2 = new JPanel();
	    p2.setLayout(new GridLayout(5, 3, 3, 3));
	    for(int i = 0; i < 15; i++){
	    	p2.add(jbtArray2[i]);
	    }
	    
	    JPanel p3 = new JPanel();
	    p3.setLayout(new GridLayout(5,2,3,3));
	    for(int i = 0; i < 10; i++){
	    	p3.add(jbtArray3[i]);
	    }
	    
	    JPanel p4 = new JPanel();
	    p4.setLayout(new GridLayout(5,3,3,3));
	    for(int i = 0; i < 15; i++){
	    	p4.add(jbtArray4[i]);
	    }
	    
	    JPanel p01 = new JPanel();
	    p01.setLayout(new FlowLayout());
	    p01.add(p0);
	    p01.add(p00);
	    p01.add(p1);
	    
	    JPanel p234 = new JPanel();
	    p234.setLayout(new BorderLayout(5,0));
	    p234.add(p4,BorderLayout.WEST);
	    p234.add(p2,BorderLayout.CENTER);
	    p234.add(p3,BorderLayout.EAST);
	    
	    JPanel p01234 = new JPanel();
	    p01234.setLayout(new BorderLayout(5,0));
	    p01234.add(p234,BorderLayout.CENTER);
	    p01234.add(p01,BorderLayout.NORTH);
	    	
	    getContentPane().add(jtfMessage,BorderLayout.NORTH);
	    getContentPane().add(p01234,BorderLayout.CENTER);
	    
	    //注册JButton、JRadioButton、JTextField
	    for(int i = 0; i < 2; i++){
	    	jbtArray1[i].addActionListener(this);
	    }
	    for(int i = 0; i < 15; i++){
	    	jbtArray2[i].addActionListener(this);
	    }
	    for(int i = 0; i < 10; i++){
	    	jbtArray3[i].addActionListener(this);
	    }
	    for(int i = 0; i < 15; i++){
	    	jbtArray4[i].addActionListener(this);
	    }
	    jtfMessage.addActionListener(this);
	    jrbHex.addActionListener(this);  jrbDec.addActionListener(this);
	    jrbRad.addActionListener(this);  jrbAng.addActionListener(this);
	    
	    //初始选中十进制,十六进制中A到F中字符不可用  三角函数计算初始使用角度制
	    jrbDec.setSelected(true);
	    for(int i = 0; i < 6; i++){
	    	jbtHex[i].setEnabled(false);
	    }
	    jrbAng.setSelected(true);
	}
	
    public void actionPerformed(ActionEvent e){
		
		if(e.getSource() == jrbHex){
			jbtPoint.setEnabled(false);   
			jbtSin.setEnabled(false);
			jbtExp.setEnabled(false);     jbtCos.setEnabled(false);
			jbtSqrt.setEnabled(false);    jbtTan.setEnabled(false);
			jbtE2.setEnabled(false);      jbtCot.setEnabled(false);
			jbtPi.setEnabled(false);      jbtExp.setEnabled(false);
			jbtRec.setEnabled(false);
			
			for(int i = 0; i < 6; i++){
	    	   jbtHex[i].setEnabled(true);
	        }
	        cal.hexDec = 16;
	        if(jtfMessage.getText() != "")
	        	jtfMessage.setText("");
		}
		else if(e.getSource() == jrbDec){
			jbtPoint.setEnabled(true);
			jbtSin.setEnabled(true);
			jbtExp.setEnabled(true);     jbtCos.setEnabled(true);
			jbtSqrt.setEnabled(true);    jbtTan.setEnabled(true);
			jbtE2.setEnabled(true);      jbtCot.setEnabled(true);
			jbtPi.setEnabled(true);      jbtExp.setEnabled(true);
			jbtRec.setEnabled(true);
			for(int i = 0; i < 6; i++){
	    	   jbtHex[i].setEnabled(false);
	        }
	        cal.hexDec = 10;
	        if(jtfMessage.getText() != "")
	        	jtfMessage.setText("");
		}
		
		else if(e.getSource() == jrbRad){
			cal.radAng = 0;
			if(jtfMessage.getText() != "")
	        	jtfMessage.setText("");
		}
		
		else if(e.getSource() == jrbAng){
			cal.radAng = 1;
			if(jtfMessage.getText() != "")
	        	jtfMessage.setText("");
		}
		
		//按BackSpace键时,如果是sin,cos,tan,cot,lg,ln等符号,一次全部删除,如果文本区为空,不进行任何操作
		else if(e.getSource() == jbtBackSpace){
			if(jtfMessage.getText() == ""){
			}
			if (jtfMessage.getText().length() > 0){
			if(jtfMessage.getText().charAt(jtfMessage.getText().length()-1) == 's' 
					|| jtfMessage.getText().charAt(jtfMessage.getText().length()-1) == 't'){
				jtfMessage.setText(jtfMessage.getText().substring(0,jtfMessage.getText().length()-3));
		        jtfMessage.requestFocus();	
			}
			else if(jtfMessage.getText().charAt(jtfMessage.getText().length()-1) == 'g'){
				jtfMessage.setText(jtfMessage.getText().substring(0,jtfMessage.getText().length()-2));
		        jtfMessage.requestFocus();	
			}
			else if(jtfMessage.getText().charAt(jtfMessage.getText().length()-1) == 'n'){
				if(jtfMessage.getText().charAt(jtfMessage.getText().length()-2) == 'l')
					jtfMessage.setText(jtfMessage.getText().substring(0,jtfMessage.getText().length()-2));
				else
					jtfMessage.setText(jtfMessage.getText().substring(0,jtfMessage.getText().length()-3));
			}
			else{
				jtfMessage.setText(jtfMessage.getText().substring(0,jtfMessage.getText().length()-1));
		        jtfMessage.requestFocus();
			}}
		}
		else if(e.getSource() == jbtC1){
			jtfMessage.setText("");
		    jtfMessage.requestFocus();
		}
		else if(e.getSource() == jbtPow){
			jtfMessage.setText(jtfMessage.getText() + "^");
		    jtfMessage.requestFocus();
		}
		else if(e.getSource() == jbtSqu){
			jtfMessage.setText(jtfMessage.getText() + "^2");
		    jtfMessage.requestFocus();
		}
		else if(e.getSource() == jbtCub){
			jtfMessage.setText(jtfMessage.getText() + "^3");
		    jtfMessage.requestFocus();
		}
		else if(e.getSource() == jbtSqrt){
			jtfMessage.setText(jtfMessage.getText() + "^0.5");
		    jtfMessage.requestFocus();
		}
		else if(e.getSource() == jbtExp){
			jtfMessage.setText(jtfMessage.getText() + String.valueOf(Math.E) + "^");
		    jtfMessage.requestFocus();
		}
		else if(e.getSource() == jbtFac){
			jtfMessage.setText(jtfMessage.getText() + "!");
		    jtfMessage.requestFocus();
		}
		else if(e.getSource() == jbtMod){
			jtfMessage.setText(jtfMessage.getText() + "|");
		    jtfMessage.requestFocus();
		}
		else if(e.getSource() == jbtRec){
			jtfMessage.setText(jtfMessage.getText() + "1/");
		    jtfMessage.requestFocus();
		}
		else if(e.getSource() == jbtE2){
			jtfMessage.setText(jtfMessage.getText() + String.valueOf(Math.E));
		    jtfMessage.requestFocus();
		}
		else if(e.getSource() == jbtPi){
			if(cal.radAng == 1)
				jtfMessage.setText(jtfMessage.getText() + "180");
			else
				jtfMessage.setText(jtfMessage.getText() + String.valueOf(Math.PI));
		    jtfMessage.requestFocus();
		}
		
		//按下等于号时将文本区中字符串作为Calculate类中DoCalculate方法的参数,在文本区中显示计算结果
		else if(e.getSource() == jbtEqu){
			jtfMessage.setText(cal.DoCalculate(jtfMessage.getText()));
		    jtfMessage.requestFocus();
		}
		else{
			jtfMessage.setText(jtfMessage.getText() + e.getActionCommand());
		    jtfMessage.requestFocus();
		}
	}
}

⌨️ 快捷键说明

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