用java编写的计算器
用java编写的计算器
import java.awt.*;import java.awt.event.*;import java.util.*;import javax.swing.*;public class Calculator extends JFrame{ private float op1,op2;//定义两个变量存放需要运算的值 private String str="";//定义str去和text进行交叉赋值 private String opr,co;//opr存放符合,co用来存放复制的内容 private double re;//用来存放运算的结果 private boolean bo=false;//是否进行了+-*/运算 private boolean btime=false;//时间开关 Container contentpane=this.getContentPane(); JPanel panel1=new JPanel(new BorderLayout()), panel2=new JPanel(new FlowLayout()), panel3=new JPanel(new GridLayout(4,5)), panel4=new JPanel(new BorderLayout()), panel5=new JPanel(new BorderLayout()); //菜单栏 JMenuBar menubar=new JMenuBar(); JMenu edit=new JMenu("编辑(E)"), find=new JMenu("查看(V)"), help=new JMenu("帮助(H)"); JMenuItem copy=new JMenuItem("复制(C)",'C'), paste=new JMenuItem("粘贴(P)",'P'), standard=new JMenuItem("标准型(T)",'T'), science=new JMenuItem("科学型(S)",'S'), numarray=new JMenuItem("数字分组(I)",'I'), helptopic=new JMenuItem("帮助主题(H)",'H'), aboutcal=new JMenuItem("关于计算器(A)",'A'); //输入文本框 JTextField text=new JTextField(25); //数字键 JButton one=new JButton("1"), two=new JButton("2"), three=new JButton("3"), four=new JButton("4"), five=new JButton("5"), six=new JButton("6"), seven=new JButton("7"), eight=new JButton("8"), nine=new JButton("9"), zero=new JButton("0"); //功能键 JButton division=new JButton("/"), multiply=new JButton("*"), addition=new JButton("+"), subtration=new JButton("-"), sqrt=new JButton("sqrt"), residual=new JButton("%"), sign=new JButton("+/-"), dot=new JButton("."), reciprocal=new JButton("1/X"), amount=new JButton("="), backspace=new JButton("Backspace"), ce=new JButton("CE"), c=new JButton("C"), time=new JButton("time");public Calculator() {contentpane.setLayout(new BorderLayout());//textField文本从右边开始写text.setHorizontalAlignment(SwingConstants.RIGHT);text.setText("0.");//菜单栏添加edit.add(copy);edit.add(paste);find.add(standard);find.add(science);find.addSeparator();find.add(numarray);help.add(helptopic);help.addSeparator();help.add(aboutcal);//把组件添加至容器中menubar.add(edit);menubar.add(find);menubar.add(help);panel1.add(menubar,"North");panel1.add(text,"West");//添加数字、功能键至panel2、panel3panel2.add(backspace);panel2.add(ce);panel2.add(c);panel2.add(time);panel3.add(seven);panel3.add(eight);panel3.add(nine);panel3.add(division);panel3.add(sqrt);panel3.add(four);panel3.add(five);panel3.add(six);panel3.add(multiply);panel3.add(residual);panel3.add(one);panel3.add(two);panel3.add(three);panel3.add(subtration);panel3.add(reciprocal);panel3.add(zero);panel3.add(sign);panel3.add(dot);panel3.add(addition);panel3.add(amount);panel4.add(panel2,"North");panel4.add(panel3,"West");panel5.add(panel1,"North");panel5.add(panel4,"West");contentpane.add(panel5,"North");//事件//助记符edit.setMnemonic('E');find.setMnemonic('V');help.setMnemonic('H');//快捷键KeyStroke kcopy=KeyStroke.getKeyStroke(KeyEvent.VK_C,Event.CTRL_MASK);copy.setAccelerator(kcopy);KeyStroke kpaste=KeyStroke.getKeyStroke(KeyEvent.VK_V,Event.CTRL_MASK);paste.setAccelerator(kpaste);//0-9、.的显示事件actionlistener1 al1=new actionlistener1();one.addActionListener(al1);two.addActionListener(al1);three.addActionListener(al1);four.addActionListener(al1);five.addActionListener(al1);six.addActionListener(al1);seven.addActionListener(al1);eight.addActionListener(al1);nine.addActionListener(al1);//小数点的ActionListener事件dot.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){int count;count=str.length();//1.第一位就为.时改变text中内容为:"0."if(count==0){str="0.";text.setText(str);}//2.不可以重复按"."else {if(!str.contains(".")){ str+="."; text.setText(str);}elseSystem.out.println("您再点的话,输入的将不再是小数了!");}}});//如果第一位是0那么第二位就不可以为0zero.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){int count;count=str.length();if(bo){if(!(str.contains("0")&&count==1)){ str=""; str+="0"; text.setText(str);}elseSystem.out.println("您再点的话,输入的将不再是数字了!"); }else{if(!(str.contains("0")&&count==1)){ str+="0"; text.setText(str);}elseSystem.out.println("您再点的话,输入的将不再是数字了!");}bo=false;}});//+、-、*、/、%运算actionlistener3 al3=new actionlistener3();addition.addActionListener(al3);subtration.addActionListener(al3);multiply.addActionListener(al3);division.addActionListener(al3);residual.addActionListener(al3);//CE和C清空按钮时间actionlistener2 al2=new actionlistener2();ce.addActionListener(al2);c.addActionListener(al2);//退格键backspace.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ int count; count=str.length()-1; if(bo==false){ if(count>=0){ str=str.substring(0,count); text.setText(str); } else text.setText("0."); }else System.out.println("您现在正进行法则运算!"); }});//求平方根sqrt.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ int count; count=str.length(); if(count!=0){ op1=Float.parseFloat(text.getText()); re=Math.sqrt(op1); String str1=String.valueOf(re); text.setText(str1); str=""; } else System.out.println("您现在的按sqrt键毫无意义"); }});//求倒数reciprocal.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ int count; count=str.length(); if(count!=0){ op1=Float.parseFloat(text.getText()); if(op1!=0){ re=1/op1; String str1=String.valueOf(re); text.setText(str1); str=str1; } else{ text.setText("除数不可以为0的"); str=""; } } else System.out.println("您现在的按1/X键毫无意义"); }});//=事件amount.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ op2=Float.parseFloat(str);//需判断进行那种运算法则 if(opr=="+"){//加法运算 re=op1+op2; String str1=String.valueOf(re); text.setText(str1); str=String.valueOf(re); }else{ if(opr=="-"){//减法运算 re=op1-op2; String str1=String.valueOf(re); text.setText(str1); str=String.valueOf(re); }else{ if(opr=="*"){//乘法运算 re=op1*op2; String str1=String.valueOf(re); text.setText(str1); str=String.valueOf(re); }else{ if(opr=="/"&&op2!=0){//除法运算 re=op1/op2; String str1=String.valueOf(re); text.setText(str1); str=String.valueOf(re); }else{ if(opr=="%"){//取余运算 re=op1%op2; String str1=String.valueOf(re); text.setText(str1); str=""; } else if(op2==0){ text.setText("除数不可以为0的"); str=""; } } } } } //打印看看 System.out.print(op1); System.out.print(opr); System.out.print(op2+"="); System.out.print(re); System.out.println(); }});//复制事件copy.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){ int count; count=str.length(); if(count!=0){ co=text.getText(); } else System.out.println("没有可复制的对象");}});//粘贴事件paste.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){str=co;text.setText(str);}});//时间事件time.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){if(btime==false){String st=(new Date()).toString();text.setText(st);str="";btime=true;}else{text.setText(str);btime=false;}}});//+/-事件sign.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){int a=Integer.valueOf(str);a=a*(-1);str=String.valueOf(a);text.setText(str);}});}//定义1-9按钮在text中显示的内部类 class actionlistener1 implements ActionListener{ public void actionPerformed(ActionEvent e){ JButton button=(JButton)e.getSource(); String btext=button.getText(); //如果第一位为0再输入其他非零的整数时将零忽略 if(bo){ if(str.indexOf("0")==0&&str.length()==1){ str=""; str+=btext; text.setText(str);}else{ str=""; str+=btext; text.setText(str);} }else{ if(str.indexOf("0")==0&&str.length()==1){ str=""; str+=btext; text.setText(str);}else{ str+=btext; text.setText(str); } } bo=false; } } //定义清空text中内容的内部类 class actionlistener2 implements ActionListener{ public void actionPerformed(ActionEvent e){ str=""; text.setText("0."); } } //定义+、-、*、/、%运算的内部类 class actionlistener3 implements ActionListener{ public void actionPerformed(ActionEvent e){ int count; count=str.length(); if(count!=0){ JButton button=(JButton)e.getSource(); opr=button.getText(); op1=Float.parseFloat(str); bo=true; } else System.out.println("您现在的按键毫无意义!"); } } public static void main(String[] args){ Calculator cc=new Calculator(); cc.pack(); cc.setResizable(false);//不可最大化 cc.setVisible(true); cc.setTitle("计算器"); cc.setDefaultCloseOperation(EXIT_ON_CLOSE); Dimension scmsize=Toolkit.getDefaultToolkit().getScreenSize(); int w=cc.getSize().width; int h=cc.getSize().height; int x=(scmsize.width-w)/2; int y=(scmsize.height-h)/2; cc.setLocation(x, y); }}