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

📄 keyspanel.java

📁 用java实现计算器功能的程序
💻 JAVA
字号:
/*
作者:谭建枚  05应数2班 学号200530770224
日期:2007.5.12
介绍:
	一个计算器程序类,功能除了正规的加.减.乘.除之外,还有
求百分率,平方,开方,阶乘,退格,重置,清零,正负号,乘以PI,sin,cos,tan.等
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JLabel;
public class keysPanel extends JPanel 
{
	private JButton b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16;//数字和加减乘除按钮

	private JButton cb1,cb2,cb3,cb4,cb5,cb6,cb7,cb8,cb9,cb10,cb11,cb12;//其他运算符号和控制按钮

	private JLabel num1Label,num2Label,calLabel;
	public Container resultLabel;
	private double num1=0.0,num2=0.0,bfnum,minue=0.00000001;
	private int delnum=10;

	private boolean del=false,chnum=true,ag=true;	/*del--小数点;
							chnum--区分数据1和数据2;
							ag--again判断输入的状态是继续还是重来*/

	private String str1=new String(),str2=new String(),cal=new String(" ");
	public keysPanel()
	{
		num1Label=new JLabel("                           ");
		num2Label=new JLabel("                          ");
		calLabel=new JLabel(" ");
		resultLabel=new Container();
		resultLabel.setLayout(new BorderLayout());
		resultLabel.add(num1Label,BorderLayout.NORTH);
		resultLabel.add(calLabel,BorderLayout.WEST);
		resultLabel.add(num2Label,BorderLayout.CENTER);

		setBackground(Color.green);
		setLayout(new GridLayout(4,4));
		
		//set buttons		
		b1=new JButton("1");
		b2=new JButton("2");
		b3=new JButton("3");
		b4=new JButton("4");
		b5=new JButton("5");
		b6=new JButton("6");
		b7=new JButton("7");
		b8=new JButton("8");
		b9=new JButton("9");
		b10=new JButton("0");
		b11=new JButton(".");
		b12=new JButton("=");
		b13=new JButton("+");
		b14=new JButton("-");
		b15=new JButton("*");
		b16=new JButton("÷");

		cb1=new JButton("%");
		cb2=new JButton("<--");
		cb3=new JButton("pi");
		cb4=new JButton("sqrt");
		cb5=new JButton("CE");
		cb6=new JButton("sin");
		cb7=new JButton("^2");
		cb8=new JButton("AC");
		cb9=new JButton("cos");
		cb10=new JButton("x!");
		cb11=new JButton("+/-");
		cb12=new JButton("tan");

		ButtonListener1 blistener1=new ButtonListener1();
		ButtonListener2 blistener2=new ButtonListener2();

		b1.addActionListener(blistener1);
		b2.addActionListener(blistener1);
		b3.addActionListener(blistener1);
		b4.addActionListener(blistener1);
		b5.addActionListener(blistener1);
		b6.addActionListener(blistener1);
		b7.addActionListener(blistener1);
		b8.addActionListener(blistener1);
		b9.addActionListener(blistener1);
		b10.addActionListener(blistener1);

		b11.addActionListener(blistener2);
		b12.addActionListener(blistener2);
		b13.addActionListener(blistener2);
		b14.addActionListener(blistener2);
		b15.addActionListener(blistener2);
		b16.addActionListener(blistener2);


		cb1.addActionListener(blistener2);
		cb2.addActionListener(blistener2);
		cb3.addActionListener(blistener1);
		cb4.addActionListener(blistener2);
		cb5.addActionListener(blistener2);
		cb6.addActionListener(blistener2);
		cb7.addActionListener(blistener2);
		cb8.addActionListener(blistener2);
		cb9.addActionListener(blistener2);
		cb10.addActionListener(blistener2);
		cb11.addActionListener(blistener1);
		cb12.addActionListener(blistener2);


		add(b1);add(b2);add(b3);add(b13);add(cb1);add(cb2);add(cb3);		//1 |2 |3 |+|  % | <--|pi
		add(b4);add(b5);add(b6);add(b14);add(cb4);add(cb5);add(cb6);		//4 |5 |6 |-|sqrt| CE |sin
		add(b7);add(b8);add(b9);add(b15);add(cb7);add(cb8);add(cb9);		//7 |8 |9 |*| ^2 | AC |cos
		add(b10);add(b11);add(b12);add(b16);add(cb10);add(cb11);add(cb12);	//0 |. |= |÷| x! |+/- |tan

	}

	//calculate计算
	public void calculate()
	{
	try{
		if(cal.charAt(0)!=' ')
		{
				switch(cal.charAt(0))
				{
					case '+':num1+=num2;break;							
					case '-':num1-=num2;break;							
					case '*':num1*=num2;break;
					case '/':if(num2!=0)num1/=num2;break;
				}
				
				str1=Double.toString(num1);
				for(int i=0;i<27-str1.length();i++)str1=" "+str1;
				num1Label.setText(str1);
				calLabel.setText(cal);
				del=false;delnum=10;//小数点
				chnum=false;//可以继续输入num2
				ag=true;
		}
	}catch(ArithmeticException problem){}
	}

	//重置 rest
	public void rest()
	{
		num1=0;num2=0;cal=" ";
		del=false;chnum=true;ag=true;
		delnum=10;
		updatenum();
	}

	//更新标签
	public void updatenum()
	{
		if(num1<minue&&num1>(-minue))num1=0;
		if(num2<minue&&num2>(-minue))num2=0;
		str1=Double.toString(num1);
		for(int i=0;i<27-str1.length();i++)str1=" "+str1;
		num1Label.setText(str1);
		str2=Double.toString(num2);
		for(int i=0;i<26-str2.length();i++)str2=" "+str2;
		num2Label.setText(str2);
		calLabel.setText(cal);
	}

	//求阶乘
	public int fac(int n)
	{
		if(n<=1)return 1;
		else return(n*fac(n-1));
	}

	//退格
	public void back()
	{
		double bu,fu;
		if(chnum==true)bu=num1;
		else bu=num2;
		if(del==true){delnum/=10;bu*=delnum;}
		fu=bu%10;
		bu-=fu;
		bu/=delnum;
		if(chnum==true)num1=bu;
		else num2=bu;
		updatenum();
	}

		//Button Listener
		private class ButtonListener1 implements ActionListener
		{
			public void actionPerformed(ActionEvent event)
			{
				if(ag==true){rest();ag=false;}

				if(chnum==true)bfnum=num1;      //区分数据1和数据2
				else bfnum=num2;

				if(event.getSource()==cb3){bfnum*=Math.PI;}    //乘以pi
				else if(event.getSource()==cb11){bfnum=-bfnum;}//转换正负号 +/-
				else{
					bfnum*=delnum;	//小数点数字

					if(event.getSource()==b1)bfnum+=1;
					else if(event.getSource()==b2)bfnum+=2;
					else if(event.getSource()==b3)bfnum+=3;
					else if(event.getSource()==b4)bfnum+=4;
					else if(event.getSource()==b5)bfnum+=5;
					else if(event.getSource()==b6)bfnum+=6;
					else if(event.getSource()==b7)bfnum+=7;
					else if(event.getSource()==b8)bfnum+=8;
					else if(event.getSource()==b9)bfnum+=9;
					else if(event.getSource()==b10)bfnum+=0;
				
					if(del==true){bfnum/=delnum;delnum*=10;}//这句无论输入小数还是整数都行,太完美了!
				}
				if(chnum==true){num1=bfnum;}
					else {num2=bfnum;}	
				updatenum();
			}
		}


		private class ButtonListener2 implements ActionListener
		{
			public void actionPerformed(ActionEvent event)
			{
				if(event.getSource()==b13){cal="+";ag=false;}	//+
				else if(event.getSource()==b14){cal="-";ag=false;}	//-
				else if(event.getSource()==b15){cal="*";ag=false;}	//*
				else if(event.getSource()==b16){cal="/";ag=false;}	//  /
				else if(event.getSource()==b12){calculate();return;}	//计算
				else if(event.getSource()==b11){if(del==false)del=true;return;}	//小数点

				else if(event.getSource()==cb1){calculate();		//计算百分率
												num1*=100;
												str1=Double.toString(num1)+"%";
												for(int i=0;i<27-str1.length();i++)str1=" "+str1;
												num1Label.setText(str1);}
				else if(event.getSource()==cb2){back();return;}			//退格
				
				else if(event.getSource()==cb4){cal="sqrt";num1=Math.sqrt(num1);updatenum();}	//对数据1做开方 
				else if(event.getSource()==cb5){cal=" ";num2=0;updatenum();}		//CE
				else if(event.getSource()==cb6){calculate();			//sin
												num1=Math.sin(num1);
												updatenum();}
				else if(event.getSource()==cb7){calculate();num1=num1*num1;updatenum();}		//平方
				else if(event.getSource()==cb8){rest();return;}			//AC
				else if(event.getSource()==cb9){calculate();		//cos
												num1=Math.cos(num1);
												updatenum();}
				else if(event.getSource()==cb10){calculate();
												 if(num1<=10&&num1>=0){num1=(double)fac((int)num1);}
												 }	//求阶乘
				
				else if(event.getSource()==cb12){calculate();		//tan
												 num1=Math.tan(num1);
												 updatenum();}

				
				num2=0;
				updatenum();
				del=false;delnum=10;//小数点
				chnum=false;
			}
		}
}

⌨️ 快捷键说明

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