简易计算器完美版

4 篇文章 0 订阅
//计算器
package com.gui;
import java.awt.*;

import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.text.AbstractDocument.BranchElement;

import java.awt.event.*;
public class Calculator extends JFrame implements ActionListener,KeyListener{
	//创建组件
	MenuBar bar;
	Menu menu_Look,menu_Edie,menu_Help;
	MenuItem item_Biaozhun,item_Kexue;
	MenuItem item_Copy,item_PastItem;
	MenuItem item_LookHelp,item_About;
	
	JTextField xianshi;
	JButton[] numButtons,functionButtons,signButtons;
	JPanel jPanel;
	Font font =new Font("Serif",Font.BOLD,20);//设置字号
	
	
	boolean root =  false;//记录是否有过操作
	
	String numString1;//作为字符串和double之间的中间转换着	
	String numstrString2;
	
	double num_1,num_2;
	
	double result_double;//接收计算结果
	String result_string;//将结果转化成字符串
	
	String ysfString = "+";
	
	String ms=new String();      //用于MS键位接收数据
	double dbms;                //用来接收转换后的MS值
	double dbm;                 //用来接收M+的值
	String scpy;                //用来接收拷贝的数据
	
	public Calculator() {
		super("计算器");
		bar = new MenuBar();
		menu_Look = new Menu("查看[V]");
		menu_Edie = new Menu("编辑[E]");
		menu_Help = new Menu("帮助[H]");
		
		item_Biaozhun = new MenuItem("标准型");
		item_Kexue = new MenuItem("科学型");
		
		item_Copy = new MenuItem("复制");
		item_PastItem = new MenuItem("粘贴");
		
		item_LookHelp = new MenuItem("查看帮助");
		item_About = new MenuItem("关于计算器");
		
		
		xianshi = new JTextField("0",12);
		xianshi.setFont(font);
		xianshi.setEditable(false);
		xianshi.setHorizontalAlignment(SwingConstants.RIGHT);
		jPanel = new JPanel();
		jPanel.setLayout(null);
		//菜单的添加
		menu_Look.add(item_Biaozhun);
		menu_Look.add(item_Kexue);
		menu_Edie.add(item_Copy);
		menu_Edie.add(item_PastItem);
		menu_Help.add(item_LookHelp);
		menu_Help.add(item_About);		
		
		bar.add(menu_Look);
		bar.add(menu_Edie);
		bar.add(menu_Help);
		
		setMenuBar(bar);//将下拉菜单添加到组件
		
		//主操作区
		xianshi.setBounds(25,10,200,30);
		//功能键
		String[] strings = {"MC","MR","MS","M+","M-","←","CE","C","±","√",
				"7","8","9","/","%","4","5","6","*","1/x","1","2","3","-","=","0",".","+"};		
		functionButtons = new  JButton[strings.length];
		
		int j=2;
		for (int i = 0; i < strings.length; i++) {
	
			functionButtons[i] = new JButton(strings[i]);
			functionButtons[i].addActionListener(this);
			functionButtons[i].setMargin(new Insets(0,0,0,0));
			if(i<5){
				functionButtons[i].setBounds(25+40*i,50,35,30);				
			}else if(i>=5 && i<10){
				functionButtons[i].setBounds(25+40*(i-5),90,35,30);		
			}else if (i>=10 && i<15) {
				functionButtons[i].setBounds(25+40*(i-10),130,35,30);	
			}else if(i>=15 && i<20){
				functionButtons[i].setBounds(25+40*(i-15),170,35,30);
			}else if(i>=20&&i<24){
				functionButtons[i].setBounds(25+40*(i-20),210,35,30);
			}if (i==24) {
				functionButtons[i].setBounds(25+40*(i-20), 210, 35, 70);
			}
			if(i==25){
				functionButtons[i].setBounds(25, 250, 75, 30);
			}else if (i==26|i==27) {
				
				functionButtons[i].setBounds(25+j*40, 250, 35, 30);
				j++;
			}			
			jPanel.add(functionButtons[i]);						
		}		
		
		item_Biaozhun.addActionListener(this);
		item_Kexue.addActionListener(this);
		item_Copy.addActionListener(this);
		item_About.addActionListener(this);
		item_LookHelp.addActionListener(this);
		item_PastItem.addActionListener(this);
		
		jPanel.add(xianshi);
		add(jPanel);
			
	}
	
	public static void main(String[] args) {
		Calculator calculator = new Calculator();
		calculator.setSize(250,350);
		calculator.setLocationRelativeTo(null);
		calculator.setVisible(true);
		calculator.setResizable(false);
		calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		

	}

	@Override
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void keyPressed(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		String xin = e.getActionCommand();//接受键盘
		String old = xianshi.getText();//显示框原有数据
		
		//0-9键盘
		if ("0123456789".indexOf(xin) != -1) {
			if (root) {
				xianshi.setText(old+xin);
				
			}else {
				xianshi.setText(xin);
				root = true;
			}
		}
		//运算符键盘
		else if("+-*/".indexOf(xin)!=-1){   //判断选择的运算符,
			numString1 = old;                //选择运算符后,将运算符之前的数据保存,
			ysfString = xin;                //重置ysfString,将选择的晕算符赋值给ysfString
			String linshiString = old + xin;
			xianshi.setText(linshiString);
			root = false;
		}
		//小数点键
		else if(".".equals(xin)){          //判断输入的是不是“.”
			if(old.indexOf(xin)==-1){      //判断显示区域是否已经有“.”
				xianshi.setText(old+xin);
				root=true;
			}
		}
		//正负号键
		else if("±".equals(xin)){
			if(old.startsWith("-")){          //判断输入的字符串如果是以“-”开头,就只是输出符号后面的字符串
				xianshi.setText(old.substring(1));				
			}else{
				xianshi.setText("-"+old);
			}
		}
		
		//1/x键位		
		else if("1/x".equals(xin)){			
			num_1 = Double.parseDouble(old);
			if(num_1==0){
				xianshi.setText("除数不能为零");
				root = false;
			}else{
				result_double= 1/num_1;
				result_string=Double.toString(result_double);
				xianshi.setText(result_string);
				root = false;
			}			
		}
		//%键位
		else if("%".equals(xin)){
			double db=Double.parseDouble(xianshi.getText());
			db=db/100;
			String srg=Double.toString(db);
			xianshi.setText(srg);		
			root = false;
		}
		//=键位
		else if("=".equals(xin)){
				
			num_1=Double.parseDouble(numString1);		
			num_2=Double.parseDouble(xianshi.getText());
			if(ysfString=="+"){				
				result_double=num_1+num_2;
				result_string=Double.toString(result_double);
				xianshi.setText(result_string);
			}else if(ysfString=="-"){				
				result_double=num_1-num_2;
				result_string=Double.toString(result_double);
				xianshi.setText(result_string);
			}else if(ysfString=="*"){				
				result_double=num_1*num_2;
				result_string=Double.toString(result_double);
				xianshi.setText(result_string);
			}else if(ysfString=="/"){		
				if(num_2 == 0){
					xianshi.setText("除数不能为零!");
				}else{
					result_double=num_1/num_2;
					result_string=Double.toString(result_double);
					xianshi.setText(result_string);
				}				
			}
			root= false;					
		}					
		//CE键位
		else if("CE".equals(xin)){
			xianshi.setText("0");
			num_2=0;
			root = false;
		}
		//C键位
		else if("C".equals(xin)){
			xianshi.setText("0");
			root = false;
		}
		//←键位
		else if("←".equals(xin)){
			if(old.length()>0){
				xianshi.setText(old.substring(0,old.length()-1));
			}
		}
		//开平方√
		else if("√".equals(xin)){
			num_1=Double.parseDouble(old);		
			if(num_1<0){
				xianshi.setText("函数无效");
			}else{
				num_1=Math.sqrt(num_1);
				xianshi.setText(Double.toString(num_1));
			}
		}
		//MS:存当前显示的数值
		else if("MS".equals(xin)){
			ms=xianshi.getText();
			dbms=Double.parseDouble(ms);
			if(dbms!=0)
				xianshi.setText("数据已经储存!");
			root = false;
			
		}
		//MR:读取存储器中的数值,并显示出来
		else if("MR".equals(xin)){
			xianshi.setText(ms);
			root = false;
		}		
		//M+:用已存的数值加上当前显示的数值后,再将结果保存
		else if("M+".equals(xin)){
			dbm=Double.parseDouble(xianshi.getText());
			result_double=dbm+dbms;
			ms=Double.toString(result_double);
			dbms=Double.parseDouble(ms);
			xianshi.setText(ms);
			root = false;
		}
		//M-:用已存的数值减去当前显示的数值后,再将结果保存
		else if("M-".equals(xin)){
			dbm=Double.parseDouble(xianshi.getText());
			result_double=dbms-dbm;
			ms=Double.toString(result_double);
			dbms=Double.parseDouble(ms);
			xianshi.setText(ms);
			root = false;
		}
		//MC:清除已存的数据
		else if("MC".equals(xin)){
			ms="记忆数据清除!";
			dbms = 0;
			xianshi.setText(ms);
			root = false;
		}
		//菜单上的监听实现
		//复制键
		else if(xin.equals("复制")){
			scpy=xianshi.getText();
			xianshi.setText("复制成功");
		}
		//粘贴键
		else if(xin.equals("粘贴")){
			xianshi.setText(scpy);
		}
		//标准型
		else if(xin.equals("标准型")){
			JOptionPane.showMessageDialog(this, "当前就是标准型计算器。");
		}
		//科学型
		else if(xin.equals("科学型")){
			JOptionPane.showMessageDialog(this, "小编正在彻夜编写中,敬请期待!");
		}
		//关于计算器
		else if(xin.equals("关于计算器")){
			JOptionPane.showMessageDialog(this, "版本型号:V1.0.0"+"\n"+"作者:董宏宇"+"\n"+"QQ:1358506549");
		}
		//计算器用法
		else if(xin.equals("查看帮助")){
			JOptionPane.showMessageDialog(this, "版本型号:V1.0.0"+"\n"+"MS:存当前显示的数值"+"\n"+"MR:读取存储器中的数值,并显示出来"+"\n"+"MC:清除已存的数据"+"\n"+"M-:用已存的数值减去当前显示的数值后,再将结果保存"+"\n"+"Backspace:退格键消除"+"\n"+"CE:清除一次输入"+"\n"+"C:清除数据,所有数据、算式都清除,归零复位");
		}	
		
	}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值