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

📄 calculator.java

📁 java计算器源码。仿WINDOWS自带计算器。
💻 JAVA
字号:
package day1;

import java.awt.*;
import java.awt.event.*;

import javax.swing.JTextField;

//public class Calculator implements ActionListener,WindowListener{
  public class Calculator extends Frame implements ActionListener{//implements WindowListener{
	private String[] names={"7","8","9","/","sqrt",
    		                "4","5","6","*","%",
    		                "1","2","3","-","1/x",
    		                "0","+/-",".","+","="};
	private String[] commands={"Backspace","CE","C"};
	private String[] memorys={"MC","MR","MS","M+"};
	private Button[] buttons1=new Button[names.length];
	private Button[] buttons2=new Button[commands.length];
	private Button[] buttons3=new Button[memorys.length];
	private JTextField tf;
	private TextField distf;
	private double result=0;
	private double num1=0;
	private boolean state0;//true表示输入操作数1
	private boolean state1;//true表示输入操作数1
	private boolean state2;//true表示输入运算符
	private boolean state3;//true表示输入操作数2
	private String op;
	
	//定义构造函数以及构件布局
	public Calculator(){
		super("计算器");
		setup();
//		setLayout(new BorderLayout(0,20));
//		setBackground(Color.GRAY);
		pack();
		setVisible(true);
		addWindowListener(new WindowCloser());//
	}
	
	private void setup(){
		Panel p1=new Panel(new BorderLayout(8,0));//大面板,在Frame中间
		Panel p2=new Panel(new BorderLayout(0,6));
		Panel p21=new Panel(new BorderLayout());
		Panel p22=new Panel(new GridLayout(4,1,8,4));//mc、mr面板
		Panel p3=new Panel(new BorderLayout(0,6));//p4&p5
		Panel p4=new Panel(new GridLayout(1,3,4,6));//commands
		Panel p5=new Panel(new GridLayout(4,5,4,4));//names
		
		//菜单
		  Menu m1=new Menu("编辑(E)");
		  MenuItem m11=new MenuItem("复制 Ctrl+c");
		  MenuItem m12=new MenuItem("粘贴 Ctrl+v");
		  m1.add(m11);
		  m1.add(m12);
		  Menu m2=new Menu("查看(V)");
		  MenuItem m21=new MenuItem("标准型(T)");
		  MenuItem m22=new MenuItem("科学型(S)");
		  MenuItem m23=new MenuItem("科学分组(I)");
		  m2.add(m21);
		  m2.add(m22);
		  m2.add(m23);
		  Menu m3=new Menu("帮助(H)");
		  MenuItem m31=new MenuItem("帮助主题(H)");
		  MenuItem m32=new MenuItem("关于计算器(A)");
		  m3.add(m31);
		  m3.add(m32);
		  MenuBar ma=new MenuBar();
		  ma.add(m1);
		  ma.add(m2);
		  ma.add(m3);
		  setMenuBar(ma);
		  
		//文本域
		  
		  tf=new JTextField("0");
		  tf.setHorizontalAlignment(JTextField.RIGHT);
		  distf=new TextField();
		  distf.setEditable(false);
		  
		//添加组件
		  for(int i=0;i<names.length;i++){
			  buttons1[i]=new Button(names[i]);
			  buttons1[i].setForeground(Color.blue);
			  p5.add(buttons1[i]);
			  buttons1[i].addActionListener(this);
		  }
		  
		  buttons1[3].setForeground(Color.red);
		  buttons1[8].setForeground(Color.red);
		  buttons1[13].setForeground(Color.red);
		  buttons1[18].setForeground(Color.red);
		  buttons1[19].setForeground(Color.red);
		  
		  
		  for(int i=0;i<commands.length;i++){
			  buttons2[i]=new Button(commands[i]);
			  p4.add(buttons2[i]);
			  buttons2[i].setForeground(Color.red);
		      buttons2[i].addActionListener(this);
		  }
		
		  for(int i=0;i<memorys.length;i++){
			  buttons3[i]=new Button(memorys[i]);
			  p22.add(buttons3[i]);
			  buttons3[i].setForeground(Color.red);
			  buttons3[i].addActionListener(this);
		  }
		  
		  p3.add(p4,BorderLayout.NORTH);
		  p3.add(p5,BorderLayout.CENTER);
		  p21.add(distf,BorderLayout.CENTER);
		  p2.add(p21,BorderLayout.NORTH);
		  p2.add(p22,BorderLayout.CENTER);
		  p1.add(p2,BorderLayout.WEST);
		  p1.add(p3,BorderLayout.CENTER);
	  
		  add(tf,BorderLayout.NORTH);
		  add(p1,BorderLayout.CENTER);
	}
	
	//窗口事件处理
	public class WindowCloser extends WindowAdapter {
	public void windowClosing(WindowEvent e){
		System.exit(0);
	    }
    }
	
	public void actionPerformed(ActionEvent e){
		String label=e.getActionCommand();
		String str=tf.getText();
		state0=true;
		state1=false;
		state2=false;
		if(label=="C"){
			result=0;
			tf.setText("0");
			state0=true;
//			state2=true;
		}
		else if(label=="CE"){
			tf.setText("0");
			state0=true;
		}
		else if(label=="Backspace"){
			if(!state2){
			  if(str.length()>1)
                tf.setText(str.substring(0, str.length()-1));
               
			  else{tf.setText("0");
			   state0=true;
			   }
			}
		}
		
		else if("0123456789".indexOf(label)>0){
			  if(state0){
			    tf.setText(label);
			    state0=false;
			    state1=true;
			    state2=true;
			  }
			  else if(state1){
			    tf.setText("3");
			    state2=true;
			  }
			  num1=Double.parseDouble(tf.getText());
		}

		
//		else if("0123456789".indexOf(label)>0){
//			handNumber(label);
//		}
		
		
		else if(label=="sqrt"){
			double doubleStr=Double.parseDouble(str);
			doubleStr=Math.sqrt(doubleStr);
			tf.setText(Double.toString(doubleStr));
			if(state1) state2=true;
			if(state2) state1=true;
		}
		
		else if(label=="%"){
			
		}
		
		else if(label=="1/x"){
			if(str=="0")
				tf.setText("除数不能为零.");
			else{
				double doubleStr=Double.parseDouble(str);
			    doubleStr=1/doubleStr;
			    tf.setText(Double.toString(doubleStr));
			}
			state1=true;
			state2=true;
		}
		else if(label=="+/-"){
			double doubleStr=Double.parseDouble(str);
			doubleStr*=-1;
			tf.setText(Double.toString(doubleStr));
		}
		else if(label=="."){
			boolean isDot=true;
			for(int i=0;i<str.length();i++){
				if(str.charAt(i)=='.'){ 
					isDot=false;
				    break;
				}
			}
			if(isDot==true)
				tf.setText(str+".");
			state2=true;
		}
		
		
		else if(label=="MC")
			handleMC();
		else if(label=="MR")
			handleMC();
		else if(label=="MS")
			handleMC();
		else if(label=="M+")
			handleM();
			 
		else if("+-*/".indexOf(label)>0)
		{
			handleOp(label);
		}
		
			     
		}
	
/*	private void handNumber(String s){
		if(state0){
		tf.setText(s);
		}
		
		else
			tf.setText(tf.getText()+s);
	    state0=false;
		state1=true;
		
		//state2=true;
		//num1=Double.parseDouble(tf.getText());
	}	
*/	
	
  
	  
		private void handleOp(String s){ 
			if(state0)
				op=s;
			else{
				double num1=Double.parseDouble(tf.getText());
				if(op=="+"){
					result+=num1;
					tf.setText(Double.toString(result));
					state2=false;
					state1=false;
					state0=true;
				}
				if(op=="-"){
					result-=num1;
					tf.setText(Double.toString(result));
					state2=false;
					state1=false;
					state0=true;
				}
				if(op=="*"){
					result*=num1;
					tf.setText(Double.toString(result));
				}
				if(op=="/"){
					if(num1==0)
					   tf.setText("除数不能为零。");
					else{
					   result/=num1;
					   tf.setText(Double.toString(result));
					}
				}
				if(op=="="){
					result=num1;
					tf.setText(Double.toString(result));
		

				}
				op=s;
				state0=true;
				state1=false;
				state2=false;
				
			}			
	
		 
		}	
		
        private void handleMC(){
			
		}
        private void handleMR(){
			
		}
        private void handleMS(){
			
		}
        private void handleM(){
			
		}


	
	
	
	public static void main(String args[]) throws Exception{
		Calculator cal=new Calculator();
	}
	
	

}

⌨️ 快捷键说明

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