java編寫計算器小應用源代碼

package calculator;

import java.awt.Component;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
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 Calculator extends JFrame implements ActionListener
{
	JFrame f;
	JTextField tfView;
	JButton[] btnNum=new JButton[10];
	JButton btnBack,btnC,btnChu,btnCheng,btnJian,btnJia,btnDeng,btnDot,btnSqrt,btnJJ,btnBF,btn1X;
	JPanel pan=new JPanel();
	
	public static void main(String[] args) {
		(new Calculator()).display();
	}
	
	public void display()
	{
		f=new JFrame("計算器");
		f.setSize(300, 280);
		f.setLocation(300,200);
		f.setResizable(false);
		tfView=new JTextField("0.0");
		tfView.setEditable(false);
		tfView.setHorizontalAlignment(JTextField.RIGHT);
		//按鍵初始化
		for(int i=0;i<=9;i++)
			btnNum[i]=new JButton(""+i);
		btnBack=new JButton("Back");
		btnC=new JButton("C");
		btnCheng=new JButton("*");
		btnChu=new JButton("/");
		btnJia=new JButton("+");
		btnJian=new JButton("-");
		btnDeng=new JButton("=");
		btnDot=new JButton(".");
		btnSqrt=new JButton("Sqrt");
		btnJJ=new JButton("+/-");
		btn1X=new JButton("1/x");
		btnBF=new JButton("%");
		//設置佈局
		f.setLayout(new GridBagLayout());
		GridBagConstraints gbc=new GridBagConstraints();
		gbc.fill=GridBagConstraints.BOTH;
		gbc.anchor=GridBagConstraints.CENTER;
		Container conta=f.getContentPane();
		addCom(tfView, conta, gbc, 0, 0, 1, 4, 1, 1);
		addCom(btnBack, conta, gbc, 1, 0, 1, 2, 1, 1);
		addCom(btnC, conta, gbc, 1, 2, 1, 2, 1, 1);
		
		addCom(btnNum[7], conta, gbc, 2, 0, 1, 1, 1, 1);
		addCom(btnNum[8], conta, gbc, 2, 1, 1, 1, 1, 1);
		addCom(btnNum[9], conta, gbc, 2, 2, 1, 1, 1, 1);
		addCom(btnChu, conta, gbc, 2, 3, 1, 1, 1, 1);
		
		addCom(btnNum[4], conta, gbc, 3, 0, 1, 1, 1, 1);
		addCom(btnNum[5], conta, gbc, 3, 1, 1, 1, 1, 1);
		addCom(btnNum[6], conta, gbc, 3, 2, 1, 1, 1, 1);
		addCom(btnCheng, conta, gbc, 3, 3, 1, 1, 1, 1);
		
		addCom(btnNum[1], conta, gbc, 4, 0, 1, 1, 1, 1);
		addCom(btnNum[2], conta, gbc, 4, 1, 1, 1, 1, 1);
		addCom(btnNum[3], conta, gbc, 4, 2, 1, 1, 1, 1);
		addCom(btnJian, conta, gbc, 4, 3, 1, 1, 1, 1);
		
		addCom(btnNum[0], conta, gbc, 5, 0, 1, 1, 1, 1);
		addCom(btnJJ, conta, gbc, 5, 1, 1, 1, 1, 1);
		addCom(btnDot, conta, gbc, 5, 2, 1, 1, 1, 1);
		addCom(btnJia, conta, gbc, 5, 3, 1, 1, 1, 1);

		addCom(btn1X, conta, gbc, 6, 0, 1, 1, 1, 1);
		addCom(btnBF, conta, gbc, 6, 1, 1, 1, 1, 1);
		addCom(btnSqrt, conta, gbc, 6, 2, 1, 1, 1, 1);
		addCom(btnDeng, conta, gbc, 6, 3, 1, 1, 1, 1);
		
		//註冊監聽
		btnBack.addActionListener(this);
		btnC.addActionListener(this);
		for(int i=0;i<=9;i++){
			btnNum[i].addActionListener(this);
		}
		btnChu.addActionListener(this);
		btnCheng.addActionListener(this);
		btnJia.addActionListener(this);
		btnJian.addActionListener(this);
		btnDeng.addActionListener(this);
		btnDot.addActionListener(this);
		btnSqrt.addActionListener(this);
		btnJJ.addActionListener(this);
		btnBF.addActionListener(this);
		btn1X.addActionListener(this);
		
		
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setVisible(true);
		
	}
	private void addCom(Component c,Container con,GridBagConstraints gbcon,
			int row,int col,int numberOfRow,int numberOfCol,
			double weightX,double weightY)
	{
		gbcon.gridx=col;
		gbcon.gridy=row;
		gbcon.gridwidth=numberOfCol;
		gbcon.gridheight=numberOfRow;
		gbcon.weightx=weightX;
		gbcon.weighty=weightY;
		con.add(c,gbcon);
	}
	
	boolean isResult=true;
	double former_Num=0;
	double latter_Num=0;
	char function=' ',function2='=';
	String errorStr0="0不能作爲除數使用,請按Back鍵重新輸入";
	String errorStr1="自變量的值不能爲負,請按Back鍵重新輸入";
	public void actionPerformed(ActionEvent e) {
		JButton btnAct=(JButton)e.getSource();
		
		StringBuffer sb=new StringBuffer(tfView.getText());//接受文本框顯示的字符串
		//返回Back鍵
		if(btnAct==btnBack){  
			if(sb.toString().equals(errorStr0)||sb.toString().equals(errorStr1)){
				tfView.setText(""+former_Num);
				latter_Num=0;
				function=' ';
				isResult=false;
			}else if(!isResult&&sb.length()>1&&!sb.toString().equals("0")){
				sb.delete(sb.length()-1, sb.length());
				tfView.setText(sb.toString());
				former_Num=Double.parseDouble(sb.toString());
			}else if(!isResult){
				tfView.setText("0");
			}
				
		}
		//清除,C鍵
		if(btnAct==btnC){  
			tfView.setText("0.0");
			isResult=true;
			former_Num=latter_Num=0;
			function='+';
		}
		//數字鍵
		if(btnIsNum(btnAct)){  
			if(!sb.toString().equals(errorStr1)&&!sb.toString().equals(errorStr0)){
				int num=getBtnNum(btnAct);
				if(isResult){
					sb=new StringBuffer();
					isResult=false;
				}
				sb.append(num);
				tfView.setText(sb.toString());
			}
		}
		//點
		if(btnAct==btnDot){
			if(!sb.toString().equals(errorStr1)&&!sb.toString().equals(errorStr0))
				if(isResult){
					sb=new StringBuffer("0.");
					isResult=false;
				}else if(sb.indexOf(".")==-1) sb.append(".");
				tfView.setText(sb.toString());
		}
		
		//加法按鍵
		if(btnAct==btnJia){
			if(!sb.toString().equals(errorStr1)&&!sb.toString().equals(errorStr0))
				if(!isResult){
					if(function==' '||function2=='='){
						former_Num=Double.parseDouble(sb.toString());
						tfView.setText(""+former_Num);
						isResult=true;
						function='+';
						function2=' ';
					}else {
						latter_Num=Double.parseDouble(sb.toString());
						former_Num=calculate(former_Num,function,latter_Num);
						tfView.setText(""+former_Num);
						function='+';
						isResult=true;
					}
				}else {
					former_Num=Double.parseDouble(sb.toString());
					function='+';
					function2=' ';
				}
		}

		//減法按鍵
		if(btnAct==btnJian){
			if(!sb.toString().equals(errorStr1)&&!sb.toString().equals(errorStr0))
				if(!isResult){
					if(function==' '||function2=='='){
						former_Num=Double.parseDouble(sb.toString());
						tfView.setText(""+former_Num);
						isResult=true;
						function='-';
						function2=' ';
					}else {
						latter_Num=Double.parseDouble(sb.toString());
						former_Num=calculate(former_Num,function,latter_Num);
						tfView.setText(""+former_Num);
						function='-';
						isResult=true;
					}
				}else {
					former_Num=Double.parseDouble(sb.toString());
					function='-';
					function2=' ';
				}	
		}

		//乘法按鍵
		if(btnAct==btnCheng){
			if(!sb.toString().equals(errorStr1)&&!sb.toString().equals(errorStr0))
				if(!isResult){
					if(function==' '||function2=='='){
						former_Num=Double.parseDouble(sb.toString());
						tfView.setText(""+former_Num);
						isResult=true;
						function='*';
						function2=' ';
					}else {
						latter_Num=Double.parseDouble(sb.toString());
						former_Num=calculate(former_Num,function,latter_Num);
						tfView.setText(""+former_Num);
						function='*';
						isResult=true;
					}
				}else {
					former_Num=Double.parseDouble(sb.toString());
					function='*';
					function2=' ';
				}
		}
		

		//除法按鍵
		if(btnAct==btnChu){
			if(!isResult&&!sb.toString().equals(errorStr1)&&!sb.toString().equals(errorStr0)){
				latter_Num=Double.parseDouble(sb.toString());
				if(function==' '||function2=='='){
					former_Num=Double.parseDouble(sb.toString());
					tfView.setText(""+former_Num);
					isResult=true;
					function='/';
					function2=' ';
				}else if(latter_Num==0){
					tfView.setText(errorStr0);
				}else{
					former_Num=calculate(former_Num,function,latter_Num);
					tfView.setText(""+former_Num);
					function='/';
					isResult=true;
				}
			}else if(!sb.toString().equals(errorStr1)&&!sb.toString().equals(errorStr0)){
				former_Num=Double.parseDouble(sb.toString());
				function='/';
				function2=' ';
			}
		}
		
		//等號按鍵
		if(btnAct==btnDeng){
			if(!isResult&&!sb.toString().equals(errorStr1)&&!sb.toString().equals(errorStr0)){
				latter_Num=Double.parseDouble(sb.toString());
				if(latter_Num==0&&function=='/'){
					tfView.setText(errorStr0);
				}else if(sb.toString().equals("-")){
					former_Num=-former_Num;
					tfView.setText(""+former_Num);
					isResult=true;
					function2='=';
				}else if(function==' '||function2=='='){
					former_Num=Double.parseDouble(sb.toString());
					tfView.setText(""+former_Num);
					isResult=true;
					function2='=';
				}else{
					former_Num=calculate(former_Num,function,latter_Num);
					tfView.setText(""+former_Num);
					isResult=true;
					function2='=';
				}
			}else if(!sb.toString().equals(errorStr1)&&!sb.toString().equals(errorStr0)){
				
				former_Num=calculate(former_Num,function,latter_Num);
				tfView.setText(""+former_Num);
				isResult=true;
				function2='=';
				
			}
		}
		
		//Sqrt鍵位
		if(btnAct==btnSqrt){
			if(!sb.toString().equals(errorStr1)&&!sb.toString().equals(errorStr0)){
				latter_Num=Double.parseDouble(sb.toString());
				if(latter_Num<0){
					former_Num=latter_Num;
					tfView.setText(errorStr1);
				}else{
					former_Num=Math.sqrt(latter_Num);
					tfView.setText(""+former_Num);
					isResult=true;
					function=' ';
				}
			}
		}
		
		//正負按鍵
		if(btnAct==btnJJ){
			if(!sb.toString().equals(errorStr1)&&!sb.toString().equals(errorStr0)){
				if(!isResult){
					latter_Num=-Double.parseDouble(sb.toString());
			
					tfView.setText(""+latter_Num);
				
				}else{
					tfView.setText("-");
					isResult=false;
				}
			}
		}
		
		//百分號鍵位
		if(btnAct==btnBF){
			if(!sb.toString().equals(errorStr1)&&!sb.toString().equals(errorStr0)){
				
					latter_Num=Double.parseDouble(sb.toString());
					former_Num=latter_Num*100;
					tfView.setText(""+former_Num);
					isResult=true;
					function=' ';
			}
		}
		
		//1/X鍵位
		if(btnAct==btn1X){
			if(!sb.toString().equals(errorStr1)&&!sb.toString().equals(errorStr0)){
				
					latter_Num=Double.parseDouble(sb.toString());
					former_Num=1/latter_Num;
					tfView.setText(""+former_Num);
					isResult=true;
					function=' ';
			}
		}
		
	}
	//進行四則運算
	double calculate(double num1,char c,double num2){
		switch(c){
		case '+':
			return num1+num2;
		case '-':
			return num1-num2;
		case '*':
			return num1*num2;
		case '/':
			return num1/num2;
		default:
			return former_Num;
		}
	}
	
	//判斷所按按鍵是否爲數字按鍵
	boolean btnIsNum(JButton btnAct){
		for(int i=0;i<=9;i++)
			if(btnAct==btnNum[i])
				return true;
		return false;
	}
	//返回數字按鍵的數字
	int getBtnNum(JButton btnAct){
		for(int i=0;i<=9;i++)
			if(btnAct==btnNum[i])
				return i;
		return -1;
	}

}

發佈了20 篇原創文章 · 獲贊 14 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章