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

📄 computerpad.java.bak

📁 利用java实现的加减乘除的计算器
💻 BAK
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.LinkedList;
import java.text.NumberFormat;
public class Calculator extends Frame implements ActionListener
{
	NumberButton numberButton[];
	OperationButton operationButton[];
	Button dian,zhengfu,tuige,daoshu,dengyu,qingling;
	Panel panel;
	JTextField resultShow;
	String yunsuan[]={"+","-","*","/"};
	LinkedList lianbiao;
	boolean flag=false;
	public Calculator()
	{
		super("金芳计数器");
		lianbiao=new LinkedList();
		numberButton=new NumberButton[10];
		for(int i=0;i<=9;i++)
		{
			numberButton[i]=new NumberButton(i);
			numberButton[i].addActionListener(this);
		}
		operationButton=new OperationButton[4];
		//将yunsuan[i]中的+、-、*、/赋予operationButton数组
		for(int i=0;i<=3;i++)
		{
			operationButton[i]=new OperationButton(yunsuan[i]);
			operationButton[i].addActionListener(this);
		}
		dian=new Button(".");
		zhengfu=new Button("+/-");
		dengyu=new Button("=");
		daoshu=new Button("1/x");
		tuige=new Button("退格");
		qingling=new Button("C");
		//前景色
		qingling.setForeground(Color.red);
		tuige.setForeground(Color.red);
		dengyu.setForeground(Color.red);
		daoshu.setForeground(Color.blue);
		zhengfu.setForeground(Color.blue);
		dian.setForeground(Color.blue);
		//添加事件
        tuige.addActionListener(this);
        qingling.addActionListener(this);
		dengyu.addActionListener(this);
		dian.addActionListener(this);
		zhengfu.addActionListener(this);
		daoshu.addActionListener(this);
		//显示结果文本框的设计
		resultShow=new JTextField(10);
		resultShow.setHorizontalAlignment(JTextField.RIGHT);
		resultShow.setForeground(Color.blue);
		resultShow.setFont(new Font("TimesRoman",Font.PLAIN,14));
		resultShow.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));
		resultShow.setBackground(Color.white);
		resultShow.setEditable(false);
		panel=new Panel();
		panel.setLayout(new GridLayout(4,5));
		//第一行显示的按钮
		panel.add(numberButton[1]);
		panel.add(numberButton[2]);
		panel.add(numberButton[3]);
		panel.add(operationButton[0]);
		panel.add(qingling);
		//第二行显示的按钮
		panel.add(numberButton[4]);
		panel.add(numberButton[5]);
		panel.add(numberButton[6]);
		panel.add(operationButton[1]);
		panel.add(tuige);
		//第三行显示的按钮
		panel.add(numberButton[7]);
		panel.add(numberButton[8]);
		panel.add(numberButton[9]);
		panel.add(operationButton[2]);
		panel.add(daoshu);
		//第四行显示的按钮
		panel.add(numberButton[0]);
		panel.add(zhengfu);
		panel.add(dian);
		panel.add(operationButton[3]);
		panel.add(dengyu);
		add(panel,BorderLayout.CENTER);
		add(resultShow,BorderLayout.NORTH);
		//添加关闭事件
		addWindowListener(new WindowAdapter()
		                   {
			                 public void windowClosing(WindowEvent e)
							   {System.exit(0);}
		                   }
						   );
	   setVisible(true);
	   setBounds(100,50,240,180);
	   setResizable(false);
	   validate();
	}
	public void actionPerformed(ActionEvent e)
	{
		if(e.getSource() instanceof NumberButton)//如果鼠标单击数字按钮
		  {
			  NumberButton btn=(NumberButton)e.getSource();
			  if(lianbiao.size()==0)//如果链表中没有节点
			  {
				  int number=btn.getNumber();//从NumberButton方法中获取按钮上的字
				  lianbiao.add(""+number);
				  resultShow.setText(""+number);
				  flag=false;//等号没有被按下
			   }
			  else if(lianbiao.size()==1&&flag==false)
			   {
                  int number=btn.getNumber();
				  String num=(String)lianbiao.getFirst();
				  String s=num.concat(""+number);//将两个数字首位相接
				  lianbiao.set(0,s);
				  resultShow.setText(s);
			   }
			  else if(lianbiao.size()==1&&flag==true)
			  {
				  int number=btn.getNumber();
				  lianbiao.removeFirst();
				  lianbiao.add(""+number);//将数据添加到链表
				  flag=false;
				  resultShow.setText(""+number);
			  }
			  else if(lianbiao.size()==2)//链表中已经有两个接点
			  {
				  int number=btn.getNumber();//获取按钮上的数字
				  lianbiao.add(""+number);//链表中添加第三个接点,第二个是符号
				  resultShow.setText(""+number);
			  }
			  else if(lianbiao.size()==3)//链表中已经有三个接点
			  {
				  int number=btn.getNumber();
				  String num=(String)lianbiao.getLast();
				  String s=num.concat(""+number);//与第三个接点的数字首尾相连
				  lianbiao.set(2,s);
				  resultShow.setText(s);
			  }
		  }
		else if(e.getSource() instanceof OperationButton)//如果单击运算符号按钮
		{
			OperationButton b=(OperationButton)e.getSource();
			if(lianbiao.size()==1)
			{
				String fuhao=b.getOperator();
				lianbiao.add(fuhao);//链表添加第二个接点:运算符号
			}
			else if(lianbiao.size()==2)
			{
				String fuhao=b.getOperator();
				lianbiao.set(1,fuhao);//改变运算符号
			}
			else if(lianbiao.size()==3)//当有三个接点并且还要输入符号时,要将前面的进行运算
			{
				String fuhao=b.getOperator();
				String number1=(String)lianbiao.getFirst();
				String number2=(String)lianbiao.getLast();
				String yunsuan=(String)lianbiao.get(1);
				  //下面进行运算
				  try{
					  double n1=Double.parseDouble(number1);
                      double n2=Double.parseDouble(number2);
					  double n=0;//n为运算后的结果
					  if(yunsuan.equals("+"))//加法
					     {
						  n=n1+n2;
					      }
                      else if(yunsuan.equals("-"))//减法
					     {
						  n=n1-n2;
					      }
					  else if(yunsuan.equals("*"))//乘法
					     {
						  n=n1*n2;
					      }
					  else if(yunsuan.equals("/"))//除法
					     {
						  n=n1/n2;
					      }
					  lianbiao.clear();//清空链表内记录
					  lianbiao.add(""+n);
					  lianbiao.add(fuhao);
					  resultShow.setText(""+n);
				      }catch(Exception ee){}
			}
		}
		else if(e.getSource()==dengyu)
		 {
			flag=true;
			if(lianbiao.size()==1||lianbiao.size()==2)
			 {
				String num=(String)lianbiao.getFirst();
				resultShow.setText(""+num);//当只有一个或者两个数字,则可能一个是数字,而另外是一个数字和一个符号
			  }
			else if(lianbiao.size()==3)
			 {
				String number1=(String)lianbiao.getFirst();
				String number2=(String)lianbiao.getLast();
				String yunsuan=(String)lianbiao.get(1);
                //下面进行运算
				  try{
					  double n1=Double.parseDouble(number1);
                      double n2=Double.parseDouble(number2);
					  double n=0;//n为运算后的结果
					  if(yunsuan.equals("+"))//加法
					     {
						  n=n1+n2;
					      }
                      else if(yunsuan.equals("-"))//减法
					     {
						  n=n1-n2;
					      }
					  else if(yunsuan.equals("*"))//乘法
					     {
						  n=n1*n2;
					      }
					  else if(yunsuan.equals("/"))//除法
					     {
						  n=n1/n2;
					      }
					  resultShow.setText(""+n);
					  lianbiao.set(0,""+n);
					  lianbiao.removeLast();//删除2,3两个接点
					  lianbiao.removeLast();
				      }catch(Exception ee){}
			  }
		 }
		else if(e.getSource()==dian)
		 {
              if(lianbiao.size()==0)//链表中没有接点
			    {
					flag=false;
				 }
			   else if(lianbiao.size()==1)
			    {
				   String dot=dian.getLabel();//获取按钮上的小数点
				   String num=(String)lianbiao.getFirst();
				   String s=null;
				   if(num.indexOf(dot)==-1)//当数字中已经无小数点时
					{
					   s=num.concat(dot);
					   lianbiao.set(0,s);
				     }
					else//当数字中已经有小数点时
					 {
						s=num;
					 }
				    lianbiao.set(0,s);
					resultShow.setText(s);
			     }
			   else if(lianbiao.size()==3)
			    {
                   String dot=dian.getLabel();
				   String num=(String)lianbiao.getLast();
				   String s=null;
				   if(num.indexOf(dot)==-1)
					{
					   s=num.concat(dot);
					   lianbiao.set(2,s);
				    }
					else
					{
						s=num;
					 }
				  resultShow.setText(s);
			    }
		 }
       else if(e.getSource()==tuige)//退格
		{
		   if(lianbiao.size()==1)//有一个数
			{
			   String num=(String)lianbiao.getFirst();
			   if(num.length()>=1)//该数的长度》=1
				{
				   num=num.substring(0,num.length()-1);
				   lianbiao.set(0,num);
				   resultShow.setText(num);
			     }
		       else
				{
				   lianbiao.removeLast();
				   resultShow.setText("0");
			     }
		
		     }
			else if (lianbiao.size()==3)
			{
				String num=(String)lianbiao.getLast();
				if(num.length()>=1)
				{
					num=num.substring(0,num.length()-1);
					lianbiao.set(2,num);
					resultShow.setText(num);
				}
				else
				{
					lianbiao.removeLast();
					resultShow.setText("0");
				 }
			}
	     }
		else if(e.getSource()==zhengfu)//正负
		{
			if(lianbiao.size()==1)
			{
				String number1=(String)lianbiao.getFirst();
				try{
					double d=Double.parseDouble(number1);
					d=-1*d;
					String str=String.valueOf(d);
					lianbiao.set(0,str);
					resultShow.setText(str);
				   }catch(Exception ee){}
			 }
			 else if(lianbiao.size()==3)
			 {
				 String number2=(String)lianbiao.getLast();
				 try{
					  double d=Double.parseDouble(number2);
					  d=-1*d;
					  String str=String.valueOf(d);
					  lianbiao.set(2,str);
					  resultShow.setText(str);
				    }catch(Exception ee){}
			  }
		 }
		else if(e.getSource()==daoshu)//倒数
		 {
			if(lianbiao.size()==1||lianbiao.size()==2)
			 {
				String number1=(String)lianbiao.getFirst();
				try{
					double d=Double.parseDouble(number1);
					d=1.0/d;
					String str=String.valueOf(d);
					lianbiao.set(0,str);
					resultShow.setText(str);
				   }catch(Exception ee){}
			 }
			 else if(lianbiao.size()==3)
			 {
				 String number2=(String)lianbiao.getLast();
				 try{
					 double d=Double.parseDouble(number2);
					 d=1.0/d;
					 String str=String.valueOf(d);
					 lianbiao.set(0,str);
					 resultShow.setText(str);
				    }catch(Exception ee){}
			  }
		 }
		else if(e.getSource()==qingling)//清零
		{
			flag=false;
			resultShow.setText("0");
			lianbiao.clear();
		}
		 
	}
	public static void main(String args[])
	{
		Calculator calculator=new Calculator();
	}
};

⌨️ 快捷键说明

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