JAVA计算器源码

来源:互联网 发布:大数据与虚拟现实结合 编辑:程序博客网 时间:2024/05/01 04:31
import java.awt.BorderLayout;//做两个控件之间的间隙的
import java.awt.Color;
import java.awt.GridBagLayout;//准备做网格用的
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.GridLayout;//把中间容器设置为几行几式
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import java.awt.color.*;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;


public class jisuanji extends JFrame implements ActionListener{

//---------------菜单项-------------------------------------
JMenuBar bar=new JMenuBar();//菜单项
JMenu JMenu_bj=new JMenu("编辑");//三个主菜单
JMenu JMenu_ck=new JMenu("查看");
JMenu JMenu_bz=new JMenu("帮助");
//---------------------------------------------------------
JMenuItem JMenuItem_fz=new JMenuItem("复制");
JMenuItem JMenuItem_zt=new JMenuItem("粘贴");
JMenuItem JMenuItem_bz=new JMenuItem("标准型");
JMenuItem JMenuItem_kx=new JMenuItem("科学型");
JMenuItem JMenuItem_bzzt=new JMenuItem("帮助主题");
JMenuItem JMenuItem_gy=new JMenuItem("关于计算器");
//-------------------------------------------------------------
JPanel JPanel_west=new JPanel();
//-----------------------------------------------------------


String []s2=new String[]{"","MC","MR","MS","M+"};
   
//---------------------------------------
JPanel JPanel_center=new JPanel();//准备做为中间的容器,会再次进行分解
JPanel JPanel_north2=new JPanel();
JPanel JPanel_center2=new JPanel();

//---------------------------------------

String []s1=new String[]{"Backspace","CE","C"};



JTextField JTextField_user=new JTextField(30);



public jisuanji()
{
   super("xjh_计算器");
   jmenu();
   this.setLayout(new BorderLayout(5,5));//间隙
     text_north();
     
     west_JButton();
     center2_njb();

      }
public void jmenu()
{
   this.setJMenuBar(bar);//把菜单项添加到窗体上
   bar.add(JMenu_bj);//把三个主菜单添加到菜单项上
   bar.add(JMenu_ck);
   bar.add(JMenu_bz);
   JMenu_bj.add(JMenuItem_fz);//把子菜单项添加到主菜单里面
   JMenu_bj.add(JMenuItem_zt);
   JMenu_ck.add(JMenuItem_bz);
   JMenu_ck.add(JMenuItem_kx);
   JMenu_bz.add(JMenuItem_bzzt);
   JMenu_bz.add(JMenuItem_gy);
}
//在窗体最上面添加个TextField
public void text_north()
{
   this.add(JTextField_user,BorderLayout.NORTH);
   JTextField_user.setHorizontalAlignment(JTextField_user.RIGHT);//设置光标在右边
   JTextField_user.setText("0");
   JTextField_user.setEditable(false);
}
//在窗体左边添加JButton
public void west_JButton()
{
   this.getContentPane().add(JPanel_west,BorderLayout.WEST );//在西边添加个中间容器
   JPanel_west.setLayout(new GridLayout(5,1,5,5));//分成四行一列,(5,5)的间隔

   for(int i=0;i<s2.length;i++){
    JButton j2=new JButton(s2[i]);
    j2.addActionListener(this);
    j2.setForeground(Color.red);
    JPanel_west.add(j2);
   }

  
}
//添加个CENTER中间容器
//把CENTER中间容器当成一个整体,又把它分为NORTH2和CENTER2的中间容器
public void center2_njb()
{
   this.getContentPane().add(JPanel_center,BorderLayout.CENTER);//设置中间部分为中间容器,方向为CENTER
   JPanel_center.setLayout(new BorderLayout(5,5));//先把中间容器划分为5*5的网格,再次对他进行划分
   JPanel_center.add(JPanel_north2,BorderLayout.NORTH);//在NORTH那又放了一个中间容器
  
   JPanel_north2.setLayout(new GridLayout(1,3,5,5));//设置NORTH那为一行三列显示控件。间隙为5*5

   for(int i=0;i<s1.length;i++){
    JButton j=new JButton(s1[i]);
    j.addActionListener(this);
    j.setForeground(Color.red);
    JPanel_north2.add(j);
   }

   //----------------------------------------
   JPanel_center.add(JPanel_center2,BorderLayout.CENTER);////在CENTER那又放了一个中间容器
   JPanel_center2.setLayout(new GridLayout(4,5,5,5));//设置CENTER那为四行五列显示控件。间隙为5*5
   String [][] str=new String[][]{{"7","8","9","/","sqrt"},{"4","5","6","*","%"},{"1","2","3","-","1/x"},{"0","+/-",".","+","="}};
   for(int i=0;i<4;i++){
    for(int j=0;j<5;j++){
   
    JButton jb=new JButton(str[i][j]);
   
    jb.addActionListener(this);
    jb.setForeground(Color.blue);
    if((j>0)&(j%3==0)){
     jb.setForeground(Color.red );
    }
    if(i==3&j==4){
     jb.setForeground(Color.red );
    }
    JPanel_center2.add(jb);
   
    }
   }

}
//变量实现保存
private String firstNum="";
private String operation="=";
private boolean flag=true;//如果第一次输入清空Text的值,重新输入你的值。=》为FALSE,实现数据的APPEND
//Wwhen true false
//true:第一次用的时候,输入数字后=》false
//当按过+-*/后。false-----true


public void actionPerformed(ActionEvent e) {
   // TODO 自动生成方法存根
   String target=e.getActionCommand();//获取当前按的按钮的TEXT值。
   if("Backspace".equals(target))
   {
    //最后一个数退后时,个位数为0,再退还是0;
   
    if(JTextField_user.getText().length()>1)
    {
     //for(int i=JTextField_user.getText().length()-1;i>1;i--)
     //{
         StringBuffer buffer=new StringBuffer(JTextField_user.getText());
      buffer.delete(JTextField_user.getText().length()-1, JTextField_user.getText().length());
      JTextField_user.setText(buffer.toString());
     //}
    }
    else
    {
     JTextField_user.setText("0");
    }
    flag=true;
   }
   if("+/-".equals(target))
   {
    if(Integer.parseInt(JTextField_user.getText())>0)
    {
     JTextField_user.setText(String.valueOf("-"+(Integer.parseInt(JTextField_user.getText()))));
    }
    else
    {   
     //Math.abs()求绝对值
     JTextField_user.setText(String.valueOf(Math.abs(Integer.parseInt(JTextField_user.getText()))));
    }
   }
   if("1/x".equals(target))
   {
   
    if(Integer.parseInt(JTextField_user.getText())!=0)
    {
     if(Integer.parseInt(JTextField_user.getText())==1)
     {
      JTextField_user.setText(String.valueOf(1/(Integer.parseInt(JTextField_user.getText()))));
     }
     else
     {
       JTextField_user.setText(String.valueOf(1/(Double.parseDouble(JTextField_user.getText()))));
     }
    }
    else
    {
     System.out.println("错误: 分母不能为0!");
   
    }
    flag=true;
   }
   if("C".equals(target))
   {
    firstNum="";
    JTextField_user.setText("0");
    flag=true;
   }
   if("CE".equals(target))
   {
    JTextField_user.setText("0");
    flag=true;
   }
   if("sqrt".equals(target))
   {
    if(Integer.parseInt(JTextField_user.getText())>0)
    {
     if(Integer.parseInt(JTextField_user.getText())==1)
     {
      JTextField_user.setText(String.valueOf(1/(Integer.parseInt(JTextField_user.getText()))));
     }
     else
     {
           JTextField_user.setText(String.valueOf(Math.sqrt(Integer.parseInt(JTextField_user.getText()))));
     }
   
    }
    else
    {
     System.out.println("错误:根号内的值要大于0!");
   
    }
    flag=true;
   }
   if("=".equals(target)){
    if(firstNum.indexOf(".")>=0||JTextField_user.getText().indexOf(".")>=0)
    {
    //Integer.parseInt();
    //Double.parseDou();
    double f=Double.parseDouble(firstNum);
    double two=Double.parseDouble(JTextField_user.getText());
    double sum=0;
    if(operation.equals("+")){
     sum=f+two;
     JTextField_user.setText(String.valueOf(sum));
     firstNum=String.valueOf(sum);
    }
    else if(operation.equals("-")){
     sum=f-two;
     JTextField_user.setText(String.valueOf(sum));
     firstNum=String.valueOf(sum);
    }
    else if(operation.equals("*")){
     sum=f*two;
     JTextField_user.setText(String.valueOf(sum));
     firstNum=String.valueOf(sum);
    }
    else if(operation.equals("/")){
     sum=f/two;
     JTextField_user.setText(String.valueOf(sum));
     firstNum=String.valueOf(sum);
    }
    else if(operation.equals("%"))
    {
     int si;
     si=(int) (f%two);
     JTextField_user.setText(String.valueOf(si));
     firstNum=String.valueOf(sum);
    }
    }
    else
        {
        int f2 = Integer.parseInt(firstNum);
       int two2= Integer.parseInt(JTextField_user.getText());
       int sum2=0;
       if (operation.equals("+"))
         {
         sum2=f2+two2;
         JTextField_user.setText(String.valueOf(sum2));
         firstNum=String.valueOf(sum2);
         }
         else if (operation.equals("-"))
         {
         sum2=f2-two2;
         JTextField_user.setText(String.valueOf(sum2));
         firstNum=String.valueOf(sum2);
         }
         else if (operation.equals("*"))
         {
         sum2=f2*two2;
         JTextField_user.setText(String.valueOf(sum2));
         firstNum=String.valueOf(sum2);
         }
         else if (operation.equals("/"))
         {
          double f3=f2;
          double two3=two2;
          double sum3=f3/two3 ;   
         JTextField_user.setText(String.valueOf(sum3));
         firstNum=String.valueOf(sum2);
         }
      else if(operation.equals("%"))
     {
      sum2=f2%two2;
      JTextField_user.setText(String.valueOf(sum2));
      firstNum=String.valueOf(sum2);
     }
        }
        
        
    firstNum="0";
    flag=true;
   
   }
   if("+-*/%".indexOf(target)>=0){
    //第一:operation实现操作符的保存
    //第二:保存第一个数
    //第三:flag=true;   
    operation=target;
    firstNum=JTextField_user.getText(); //第二:保存第一个数
    flag=true;
   
   }
  
  
   //当得到数字和小数点后的工作
   if("0123456789.".indexOf(target)>=0){
    if(flag==true)
    {
     //JTextField_user.setText("0");
     if (target.equals("."))
      {
         flag= false;
      }
     else if("0".equals(target))
     {
      JTextField_user.setText("0");
     }
     else
     {
      JTextField_user.setText("");
         StringBuffer buffer = new StringBuffer (JTextField_user.getText());
         //JTextField_user.setText(target);
         JTextField_user.setText(buffer.toString());
      flag= false;
     }
   
    }
    if(flag==false){
    StringBuffer buffer=new StringBuffer(JTextField_user.getText());
    //当小数存在了,以及按了小数点就什么事都不干。
    //target.equals(".")就是判断如果按的不是点就继续添加
    if(buffer.toString().indexOf(".")>=0&&target.equals(".")){
   
    }
    else
     {
       buffer.append(target);
    }
    /*if(buffer.toString().substring(0, 1).equals("0")&&buffer.length()>1&&buffer.toString().substring(1,2)!=".")
    {
     String str="";
     str=buffer.toString().substring(0, 1);
    }*/
    JTextField_user.setText(buffer.toString());
   
    }
   }  

   
}
}