小型计算器学习

 package Calculator;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
/**
 * @author anlen
 *
 * 2014年3月14日
 * 
 */
public class MyCalculator {
 private JFrame jframe;
 private TextField textfield;
 private Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b0,
  bc,badd,bsub,bmul,bdiv,bequ,bpoint;
 private JMenuBar menubar;
 private JMenuItem item1,item2,item3;
 private JMenu menu1,menu2;
 private Panel panel,panel2;//panel放置0~9以及符号等按钮,panel2放置那两个label。
 private double num1=0.0;
 private double num2=0.0;
 private String operator="=";
 
 public void go(){
  jframe=new JFrame("计算器");
  menu1=new JMenu("文件");
  menu2=new JMenu("编辑");
  textfield=new TextField(30);
  panel=new Panel();
  panel2=new Panel();
  
//  添加每个按钮以及为每个按钮添加监听器。
  b1=new Button("1");
  b1.addActionListener(new myactionlistion());
  b2=new Button("2");
  b2.addActionListener(new myactionlistion());
  b3=new Button("3");
  b3.addActionListener(new myactionlistion());
  b4=new Button("4");
  b4.addActionListener(new myactionlistion());
  b5=new Button("5");
  b5.addActionListener(new myactionlistion());
  b6=new Button("6");
  b6.addActionListener(new myactionlistion());
  b7=new Button("7");
  b7.addActionListener(new myactionlistion());
  b8=new Button("8");
  b8.addActionListener(new myactionlistion());
  b9=new Button("9");
  b9.addActionListener(new myactionlistion());
  b0=new Button("0");
  b0.addActionListener(new myactionlistion());
  bpoint=new Button(".");
  bpoint.addActionListener(new myactionlistion());
  bc=new Button("CE");
  bc.addActionListener(new myactionlistion());
  badd=new Button("+");
  badd.addActionListener(new myactionlistion());
  bsub=new Button("-");
  bsub.addActionListener(new myactionlistion());
  bmul=new Button("*");
  bmul.addActionListener(new myactionlistion());
  bdiv=new Button("/");
  bdiv.addActionListener(new myactionlistion());
  bequ=new Button("=");
  bequ.addActionListener(new myactionlistion());
  
  panel2.add(menu1,BorderLayout.WEST);
  panel2.add(menu2,BorderLayout.CENTER);
  
  
  panel.setLayout(new GridLayout(5,4,5,5));
  panel.add(b7);
  panel.add(b8);
  panel.add(b9);
  panel.add(bdiv);
  panel.add(b4);
  panel.add(b5);
  panel.add(b6);
  panel.add(bmul);
  panel.add(b1);
  panel.add(b2);
  panel.add(b3);
  panel.add(bsub);
  panel.add(b0);
  panel.add(bpoint);
  panel.add(badd);
  panel.add(bequ);
  panel.add(bc);
  
  
  jframe.add(panel2,BorderLayout.NORTH);
  jframe.add(textfield,BorderLayout.CENTER);
  jframe.add(panel,BorderLayout.SOUTH);
  jframe.addWindowListener(new mywindowlistion());//添加一个关闭的监听器。
  
  jframe.setSize(300,500);
  jframe.pack();
  jframe.setResizable(false);//设置不能更改frame的大小。禁用最大化。
  jframe.setVisible(true);
  
 }
 public static void main(String[] args) {
   MyCalculator myCalculator=new MyCalculator();
  myCalculator.go();
  
 }
 
 class myactionlistion implements ActionListener{
 public void actionPerformed(java.awt.event.ActionEvent e) {
  
  String str=e.getActionCommand();
//  System.out.println(str);//测试用的。
  
  //判断是否是数字以及小数点。
  Matcher m1=Pattern.compile("\\d|\\.").matcher(e.getActionCommand()); 
  
  if(e.getActionCommand().equals("CE"))
   textfield.setText("0");
  
  else
   if(m1.matches()){
   textfield.setText(textfield.getText()+str); 
  
   
   num2=Double.parseDouble(textfield.getText());
   }
  
   else{
  
    if (operator.equals("="))         {
     num1 = Double.parseDouble(textfield.getText()); textfield.setText("");
    }
    else{
     handleoperator(operator); 
 
    }
    operator = e.getActionCommand();
    textfield.setText("");
   
   }
   if((textfield.getText()+e.getActionCommand()).endsWith("="))    {
      
    textfield.setText(""+num1);   num1=0.0;
   }
 }    
 
  public void handleoperator(String operator)  {
   if(operator.equals("+"))  {
    num1+=num2;  
    textfield.setText("");
   }  
   else if(operator.equals("-")) {
    num1-=num2;   textfield.setText("");
   }   
   else if(operator.equals("*"))   {
    num1*=num2;  textfield.setText("");
    }   
   else if(operator.equals("/"))   {
    if(num2==0.0)    {     
     System.out.println("除数不能为零"); 
     num1=0.0;
    }    
    else    {   
     num1/=num2;   textfield.setText("");
     }   
    } 
   
    }  
  
  } 
 }
 
 
//用于关闭窗口
class mywindowlistion extends WindowAdapter{
  @Override
  public void windowClosing(WindowEvent e) {
   System.exit(0);
  }
}

你可能感兴趣的:(java,计算器)