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

📄 jlab1002a.java

📁 java实验时编写的一个计算器
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class Calculator extends JFrame{
  JFrame frame;    //顶层容器
  JButton numberButton[];   //数字按钮
  JButton operationButton[];  //运算符号
  JButton specialButton[];     //特殊符号
  JButton buttonPoint,buttonEqual,buttonSqrt,buttonReciprocal,
         buttonPercentage,buttonShift,buttonEmpty;  //其它符号
  String symbol[]={"+","-","*","/"};
  String specialSymbol[]={"   Backspace  ","       CE       ","       C       ","MC","MR","MS","M+"};
  
  JPanel paneRightUp,paneMain,pane,paneEmpty,paneLeftDown,paneLeft,paneRight,paneDown;  //创建面板
  JTextField textField;   //显示区域
  float leftFloat,rightFloat,resultFloat=0,msFloat;//记录左右操作数以及结果
  boolean error=false;  //标志有没有出现错误
  boolean number=false,operation=false,total=false;  //标志前一个按钮按下的是哪一个键
  boolean point=false;  //标志是否按下点
  boolean first=true;  //标志是否是第一次输入
  char symbol1;  //记录操作符
  Toolkit toolkit;  //调用蜂鸣声
  
  public Calculator(String s){
    super(s);
    createButton();
    layOut();
    function();
  }  
    
  public void createButton(){
  	toolkit=Toolkit.getDefaultToolkit();
  	
  	frame=new JFrame();
  	ActionListener number=new NumberAction();  //数字监听器
    ActionListener operation=new OperationAction(); //运算符号监听器
    
    MyKeyListener myListener=new MyKeyListener(); //键盘监听器
    
     //数字键
    numberButton=new JButton[10];
    for(int i=0;i<10;i++)
    {
     numberButton[i]=new JButton(String.valueOf(i));
     numberButton[i].setBackground(Color.LIGHT_GRAY);
     numberButton[i].setForeground(Color.BLUE);
     numberButton[i].addActionListener(number);
    }  
    
    //运算符
    operationButton=new JButton[4];
    for(int i=0;i<4;i++)
    {
     operationButton[i]=new JButton(symbol[i]);
     operationButton[i].setBackground(Color.LIGHT_GRAY);
     operationButton[i].setForeground(Color.red);
     operationButton[i].addActionListener(operation);
    }
   
    //特殊功能键
    specialButton=new JButton[7];
    for(int i=0;i<7;i++)
    {
     specialButton[i]=new JButton(specialSymbol[i]);
     specialButton[i].setBackground(Color.LIGHT_GRAY);
     specialButton[i].setForeground(Color.RED);
    }  
   
    //普通功能键
    buttonPoint=new JButton(".");
    buttonPoint.setBackground(Color.LIGHT_GRAY);
    buttonPoint.setForeground(Color.blue);
    buttonEqual=new JButton("=");
    buttonEqual.setBackground(Color.LIGHT_GRAY);
    buttonEqual.setForeground(Color.red);
    buttonSqrt=new JButton("sqrt");
    buttonSqrt.setBackground(Color.LIGHT_GRAY);
    buttonSqrt.setForeground(Color.blue);
    buttonReciprocal=new JButton("1/x");
    buttonReciprocal.setBackground(Color.LIGHT_GRAY);
    buttonReciprocal.setForeground(Color.blue);
    buttonPercentage=new JButton("%");
    buttonPercentage.setBackground(Color.LIGHT_GRAY);
    buttonPercentage.setForeground(Color.blue);
    buttonShift=new JButton("+/-");
    buttonShift.setBackground(Color.LIGHT_GRAY);
    buttonShift.setForeground(Color.blue);
    buttonEmpty=new JButton("   ");
    buttonEmpty.setBackground(Color.LIGHT_GRAY);
    buttonEmpty.setForeground(Color.blue);
    buttonEmpty.setEnabled(false); 
    
    
    //显示栏
    textField=new JTextField("0.");
    textField.addKeyListener(myListener);
    textField.setHorizontalAlignment(JTextField.RIGHT); 
    textField.setBackground(Color.white);
    textField.setEditable(false);
}
  
  
  public void layOut(){
   	JPanel pane=new JPanel();
   	pane.setLayout(new BorderLayout());
   	pane.add(textField,BorderLayout.NORTH); //文本框放在最上面
    
    //下面将面板分成3个小部分进行组件的排列
    paneEmpty=new JPanel();
    paneEmpty.add(buttonEmpty);
   
    
    paneRightUp=new JPanel();
    paneRightUp.setLayout(new FlowLayout());
    paneRightUp.add(specialButton[0]);
    paneRightUp.add(specialButton[1]);
    paneRightUp.add(specialButton[2]); 
    
    paneMain=new JPanel();
    paneMain.setLayout(new GridLayout(4,5,5,5));
    
    paneMain.add(numberButton[7]);
    paneMain.add(numberButton[7]);
    paneMain.add(numberButton[8]);
    paneMain.add(numberButton[9]);
    paneMain.add(operationButton[3]);
    paneMain.add(buttonSqrt);
    
    paneMain.add(numberButton[4]);
    paneMain.add(numberButton[5]);
    paneMain.add(numberButton[6]);
    paneMain.add(operationButton[2]);
    paneMain.add(buttonPercentage);
    
    paneMain.add(numberButton[1]);
    paneMain.add(numberButton[2]);
    paneMain.add(numberButton[3]);
    paneMain.add(operationButton[1]);
    paneMain.add(buttonReciprocal);

    paneMain.add(numberButton[0]);
    paneMain.add(buttonShift);
    paneMain.add(buttonPoint);
    paneMain.add(operationButton[0]);
    paneMain.add(buttonEqual);  //end of paneMain
    
    
    paneLeftDown=new JPanel();
    paneLeftDown.setLayout(new GridLayout(4,1,5,5));
    paneLeftDown.add(specialButton[3]);
    paneLeftDown.add(specialButton[4]);
    paneLeftDown.add(specialButton[5]);
    paneLeftDown.add(specialButton[6]);
    
    paneLeft=new JPanel();
    paneLeft.setLayout(new BorderLayout());
    paneLeft.add(paneEmpty,BorderLayout.NORTH);
    paneLeft.add(paneLeftDown,BorderLayout.CENTER);
    
    paneRight=new JPanel();
    paneRight.setLayout(new BorderLayout());
    paneRight.add(paneRightUp,BorderLayout.NORTH);
    paneRight.add(paneMain,BorderLayout.CENTER);
    
    paneDown=new JPanel();
    paneDown.add(paneLeft);
    paneDown.add(paneRight);
    
    pane.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
    pane.add(paneDown,BorderLayout.CENTER);
    frame.getContentPane().add(pane);
    frame.setVisible(true);
    frame.setSize(440,260);
    setBackground(Color.LIGHT_GRAY);
    frame.validate();
 }   

  
  public void function(){
  	//等于号
  	buttonEqual.addActionListener(new ActionListener(){
       public void actionPerformed(ActionEvent e){
         equal();
        }
    });
    
    
    //开方
    buttonSqrt.addActionListener(new ActionListener(){
       public void actionPerformed(ActionEvent e){
       	 if(!error){
       	   String temp=textField.getText();
       	   int i=temp.length();
       	   if(temp.charAt(i-1)=='.'){
       	      String temp1=temp.substring(0,i-1);
       	      rightFloat=Float.valueOf(temp1).floatValue(); //最后一位为小数点,则此数为整型	     	
       	   }
       	   else
       	      rightFloat=Float.valueOf(temp).floatValue(); //最后一位不是小数点,则此数为float型	
       	   
       	   if(rightFloat<0)
       	      {textField.setText("函数输入无效");error=true;}
       	   else{
            resultFloat=(float)Math.sqrt((double)rightFloat); 
       	    String t=String.valueOf(resultFloat);
   	  	    int j=t.length();
   	  	    if(t.charAt(j-1)=='0'&&t.charAt(j-2)=='.'){
               String r=t.substring(0,j-2);
          	   textField.setText(r+".");
            }
   	  	    else textField.setText(""+resultFloat);
   	  	   }
   	  	   first=true;
   	  	   point=false;    	  	   	    	          
       	   total=true;
       	   operation=false;
           number=false;
       	 }
       	 else toolkit.beep();
       	}
    });   	 	
      
      
      
      //倒数
      buttonReciprocal.addActionListener(new ActionListener(){
       public void actionPerformed(ActionEvent e){
         if(!error){
           String temp=textField.getText();
       	   int i=temp.length();
       	   if(temp.charAt(i-1)=='.'){
       	      String temp1=temp.substring(0,i-1);
       	      rightFloat=Float.valueOf(temp1).floatValue(); //最后一位为小数点,则此数为整型	     	
       	   }
       	   else
       	      rightFloat=Float.valueOf(temp).floatValue(); //最后一位不是小数点,则此数为float型	

       	   if(rightFloat==0.0){
       	   	  textField.setText("除数不能为零");
       	   	  error=true;
       	   }
       	   else{
       	   	  resultFloat=1/rightFloat;
       	   	  String t=String.valueOf(resultFloat);
   	  	      int j=t.length();
   	  	      if(t.charAt(j-1)=='0'&&t.charAt(j-2)=='.'){
                  String r=t.substring(0,j-2);
          		  textField.setText(r+".");
              }
   	  	      else textField.setText(""+resultFloat);
       	   }
       	   first=true;
       	   point=false;
       	   total=true;
       	   operation=false;
           number=false;	  
         }
         else toolkit.beep();
       }
      });
      
      
      //百分号
      buttonPercentage.addActionListener(new ActionListener(){
       public void actionPerformed(ActionEvent e){
         if(!error){
             resultFloat=rightFloat/100;
         	 String t=String.valueOf(resultFloat);
   	  	     int j=t.length();
   	  	     if(t.charAt(j-1)=='0'&&t.charAt(j-2)=='.'){
                 String r=t.substring(0,j-2);
          		 textField.setText(r+".");
   	  	     }
   	  	     textField.setText(""+resultFloat);
       	   first=true;
       	   point=false;
       	   total=true;
       	   operation=false;
           number=false; 
         }
         else toolkit.beep();
       }
      });
      
      
      
      //Backspace
      specialButton[0].addActionListener(new ActionListener(){
       public void actionPerformed(ActionEvent e){
         backspace();
       }
      }); 
      
      
      
      //小数点
      buttonPoint.addActionListener(new ActionListener(){
       public void actionPerformed(ActionEvent e){
          point();	        
          }
      });
      
      
      
      //切换正负号
      buttonShift.addActionListener(new ActionListener(){
       public void actionPerformed(ActionEvent e){
       	if(!error){
       	  String s=textField.getText();
          if(s.charAt(0)=='-'){
         	StringBuffer s1=new StringBuffer(s);
         	s1.deleteCharAt(0);
         	s=new String(s1);
         	textField.setText(s);	
          } 
         else{
         	if(!s.equalsIgnoreCase("0.")) 
         	  textField.setText("-"+textField.getText()); 
         }
        } 
        toolkit.beep(); 
       }
      }); 
      
      
      //C
      specialButton[2].addActionListener(new ActionListener(){
       public void actionPerformed(ActionEvent e){
         textField.setText("0.");
         error=false;
         point=false;

⌨️ 快捷键说明

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