package com.test;import java.awt.*;
import javax.swing.*;import java.awt.event.*;import javax.swing.border.*;public class Calculator1 extends JFrame implements ActionListener
{
private JFrame jf;
 private JButton[] allButtons;
 private JButton clearButton;
 private JButton sinButton;
 private JButton cosButton;
 private JButton tanButton;
// private JButton cotButton;
 private JTextField jtf;
 private boolean isNew = true;
 private String recentOperation = null;
 private String recentNum = null;
 public Calculator1() 
 {
  
 /**
  * 设置窗口点击关闭按钮能关闭
  */
  jf=new JFrame("计算器1.0:JAVA");
  jf.addWindowListener(new WindowAdapter()
  {
   public void windowClosing(){
    System.exit(0);
   }
  }); 
  // 实例化所有的按钮以及编辑栏
  allButtons  = new JButton[16];
  clearButton = new JButton("DEL");
  sinButton   = new JButton("sin");
  cosButton   = new JButton("cos");
  tanButton   = new JButton("tan");
  jtf=new JTextField(25);
  jtf.setEditable(false);
//  jtf.setHorizontalAlignment(alignment)
  //给CanterPanel中的按钮添加标识符
  String str="123+456-789*0.=/";
  for(int i=0;i<allButtons.length;i++)
  {
   allButtons[i]=new JButton(str.substring(i,i+1));
 }
 }
 public void init(){
  //设置布局
  jf.setLayout(new BorderLayout());
  JPanel northPanel=new JPanel();
  JPanel centerPanel=new JPanel();
  JPanel southPanel=new JPanel();
  northPanel.setLayout(new FlowLayout());
  centerPanel.setLayout(new GridLayout(4,4));
  southPanel.setLayout(new GridLayout(1,4));
  
  northPanel.add(jtf);
  for(int i=0;i<16;i++){
   centerPanel.add(allButtons[i]);
  }
  southPanel.add(sinButton);
  southPanel.add(cosButton);
  southPanel.add(tanButton);
  //southPanel.add(cotButton);
  southPanel.add(clearButton);
  
  
  jf.add(northPanel,BorderLayout.NORTH);
  jf.add(centerPanel,BorderLayout.CENTER);
  jf.add(southPanel,BorderLayout.SOUTH);
  addEventHandler();
 }
 //添加事件监听
public void addEventHandler()
{
 jtf.addActionListener(this);
 for(int i=0;i<allButtons.length;i++)
 {
  allButtons[i].addActionListener(this);
 }
 /**
  * 给DEL注册
  */
  clearButton.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent e)
{
// TODO Auto-generated method stub
Calculator1.this.jtf.setText("");
}
   });
  
  /***
   * 实现sin,cos,tan 以及 allButton事件驱动按钮
   */
  sinButton.addActionListener(new ActionListener()
  {
  public void actionPerformed(ActionEvent e)
  {
  
double temp = Math.sin(Double.parseDouble(jtf.getText()));
  jtf.setText(String.valueOf(temp));
  return;
  }
  });
  cosButton.addActionListener(new ActionListener()
  {
  public void actionPerformed(ActionEvent e)
  {
  
double temp = Math.cos(Double.parseDouble(jtf.getText()));
  jtf.setText(String.valueOf(temp));
  return;
  }
  });
  tanButton.addActionListener(new ActionListener()
  {
  public void actionPerformed(ActionEvent e)
  {
  
double temp = Math.tan(Double.parseDouble(jtf.getText()));
  jtf.setText(String.valueOf(temp));
  return;
  }
  });
  /*cotButton.addActionListener(new ActionListener()
  {
  public void actionPerformed(ActionEvent e)
  {
  
double temp =- Double.parseDouble(jtf.getText());
  jtf.setText(String.valueOf(temp));
  return;
  }
  });*/
 }
 //对输入数字的事件处理
public void actionPerformed(ActionEvent e) 
  {
  String s= e.getActionCommand();
  if(s.charAt(0)>='0'&&s.charAt(0)<='9')
  {
  if(!isNew)
  jtf.setText(jtf.getText()+s);
  else
  jtf.setText(s);
  isNew = false;
  
  }
  /**
   * 对“.”的事件处理
   */
  else if (s.equals("."))
  {
  if(jtf.getText().indexOf(".")!=-1)
  return;
  if(!isNew &&jtf.getText()!="")
  jtf.setText(jtf.getText()+".");
  else
  jtf.setText("0.");
  isNew = false;
  
  }
  //对"="的事件处理
  else if(s.equals("="))
  {
 equalaction(e); 
  
  }
  else
  {
 if((jtf.getText()).equals(""))
 return;
 if(recentOperation !=null)equalaction(e);
  recentOperation = s;
  recentNum = jtf.getText();
  isNew = true;
  
  }
}
/**
 * 对运算符及计算过程的事件处理
 * @param e
 */
private void equalaction(ActionEvent e) {
// TODO Auto-generated method stub
if(recentOperation == null|| recentNum==null|| 
jtf.getText().equals(""))
return;
double last = 0,now = 0;

try
{
last = Double.parseDouble(recentNum);
now = Double.parseDouble(jtf.getText());
}
catch(NumberFormatException en)

{
recentOperation = null;
recentNum = null;
jtf.setText("数据输入不合法");
System.out.println("数据输入不合法");
isNew = true;
return;

}
if(recentOperation.equals("+"))
{
last+=now;

}
if(recentOperation.equals("-"))
{
last-=now;

}
if(recentOperation.equals("*"))
{
last*=now;

}
if(recentOperation.equals("/"))
{
last/=now;

}
jtf.setText(""+last);
recentNum = jtf.getText();
recentOperation=null;
isNew = true;
  }   
  
  
//对CenterPanel设置 public void setFontAndColor(){
  Font f=new Font("宋体",Font.BOLD,24);
  jtf.setFont(f);
  jtf.setBackground(new Color(0x8f,0xa0,0xfb));
  for(int i=0;i<16;i++)
  {
   allButtons[i].setFont(f);
   allButtons[i].setForeground(Color.RED);
  }
 }
 
 
 public void showMe(){
  init();
  setFontAndColor();
  jf.pack();
  jf.setVisible(true);
  jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }
 
 public static void main(String[] args){
  new Calculator1().showMe();
 }
}