Java swing 计算器

import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*; 
class calculation extends JFrame   
{public calculation()     /*构造方法*/ 
   {super("计数器"); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    initTextPanel();    /*文本框*/ 
    initControlPanel(); /*控制键*/ 
    initKeyPanel();     /*数字和运算符*/ 
    Container pane = getContentPane(); 
    pane.setLayout(new BorderLayout()); 
    pane.add(TextPanel,BorderLayout.NORTH); 
    pane.add(ControlPanel,BorderLayout.CENTER);     
    pane.add(KeyPanel,BorderLayout.SOUTH); 
    pack();     
    try 
    {UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");       
    } 
    catch(Exception ex) 
    {;}        /*设置Windons观感*/ 
    SwingUtilities.updateComponentTreeUI(this); 
    setResizable(false); 
    setVisible(true);   
   }
 private void initTextPanel()  /*设置文本框*/ 
 {  TextPanel=new JPanel(); 
    TextPanel.setLayout(new FlowLayout());     
     Resultarea =new JTextField("0",25);      
     Resultarea.setEditable(false);  /*设置不可编辑*/ 
     Color color=Color.white; 
     Resultarea.setBackground(color);   /*颜色*/ 
     Resultarea.setHorizontalAlignment(JTextField.RIGHT);    /*设置显示位置*/ 
     TextPanel.add(Resultarea);   
 }
 private void initControlPanel() /*设置控制键*/ 
 {ControlPanel=new JPanel(); 
  ControlPanel.setLayout(new GridLayout(1,3,4,4));   
  JButton b1=new JButton("Backspace");    /*Backspace键*/ 
  b1.setFont(font1); 
  b1.addActionListener(new ActionListener()    
     {public void actionPerformed(ActionEvent e)  
       {String s1=Resultarea.getText(); 
         int l=s1.length(); 
         Resultarea.setText(s1.substring(0 ,l-1)); 
        } 
     });
  ControlPanel.add(b1); 
  JButton b2=new JButton("CE");   /*CE键*/ 
  b2.setFont(font1); 
  b2.addActionListener(new ActionListener() 
    {public void actionPerformed(ActionEvent e)  
       {Resultarea.setText("0"); 
        isNew=true; 
       } 
     });     
  ControlPanel.add(b2);
  JButton b3=new JButton("C");  /*C键*/ 
  b3.setFont(font1); 
  b3.addActionListener(new ActionListener() 
     {public void actionPerformed(ActionEvent e)  
        {Resultarea.setText("0"); 
         pnum=""; 
         operation=""; 
         isNew=true; 
        } 
     });     
  ControlPanel.add(b3);    
 }
 private void initKeyPanel()   /*设置数字键和运算符键*/ 
 {String key[] = {"7","8","9","/","sqrt","4","5","6","*","%","1","2","3","-","1/x","0","+/-",".","+","="}; 
    KeyPanel = new JPanel(); 
    KeyPanel.setLayout(new GridLayout(4,5,4,4)); 
    for(int i=0;i<20;i++) 
      {String label = key[i]; 
       JButton b = new JButton(label); 
       b.setActionCommand(key[i]); 
       b.setFont(font2); 
       KeyPanel.add(b); 
       b.addActionListener(new ActionListener()  /*无名监听器*/ 
        {public void actionPerformed(ActionEvent e) 
           {Key_actionPerformed(e); 
           } 
        }); 
      }
   }
  public void Key_actionPerformed(ActionEvent e) /*数字键和运算符键无名监听器*/ 
       {String s=(e.getActionCommand()); 
        String st=Resultarea.getText(); 
              if(s.equals("0"))          /*输入数为0*/ 
             {if(st.equals("0")) 
                return; 
              else  
                {if(!isNew)                 
                   Resultarea.setText(st+"0");  
                 else 
                   Resultarea.setText("0");               
                }   
             isNew=false;  
             return; 
            }
          if(s.equals("+/-"))  /*输入数为+/-*/ 
             {double k=Double.parseDouble(st);          
                {if(k!=0) 
                   display(-k);
                }
               return;   
              }
         if(s.equals("1")||s.equals("2")||s.equals("3")||s.equals("4")||s.equals("5")||s.equals("6")||s.equals("7")||s.equals("8")||s.equals("9")) /*输入1-9*/ 
                 {if(!isNew) 
                    Resultarea.setText(st+s); 
                  else 
                    { Resultarea.setText(s);    
                      isNew=false;     
                    } 
                   return;  
                  }
         if(s.equals("."))  /*输入小数点*/ 
            {if(Resultarea.getText().indexOf(".")==-1)  /*不存在小数点*/ 
               {if(isNew)                   
                   {Resultarea.setText("0.");                    
                    isNew=false; 
                   } 
                else  
                   Resultarea.setText(st+"."); 
               } 
             return; 
            }
         isNew=true;          /*按下运算符,输入新的数*/                  
         if(s.equals("=")) 
             {compute(s);  
                 operation="";                       
             } 
         else  
            {if(s.equals("+")||s.equals("-")||s.equals("*")||s.equals("/")) /*二目运算符号*/ 
                {if(operation.equals("")) 
                    {pnum=Resultarea.getText();                       
                       operation=s;                            
                    }                           
                  else 
                    compute(s);                      
                 }                            
             else   /*一目运算*/ 
                {Count count1=new Count(Double.parseDouble(st)); 
                 if(s.equals("sqrt")) 
                    { 
                      display(count1.sqrt()); 
                    }  
                 else 
                    {if(s.equals("1/x"))      
                       {if(st.equals("0")) 
                          {Resultarea.setText("除数不能为0."); 
                           operation=""; 
                           pnum=""; 
                          } 
                        else   
                           display(count1.reciprocal());     /*求倒数*/ 
                       } 
                     else 
                       display(Double.parseDouble(st)/100);  /*输入%,使当前显示的值除于100*/ 
                    }  
                }   
            }    
       } 
 private void compute(String s) 
  {if(s.equals("=")) 
     {if(operation.equals(""))    
          return;                  
     }              
   double data1=Double.parseDouble(pnum); 
   double  data2=Double.parseDouble(Resultarea.getText());          
   Count count2=new Count(data1,data2);    /*加减乘除计算*/ 
   if(operation.equals("+")) 
      display((count2.plus()));                        
   else      
      {if(operation.equals("-"))  
          display((count2.minus()));           
       else 
          {if(operation.equals("*")) 
             display((count2.multiply())); 
           else 
             if(operation.equals("/"))     
               {if(data2==0) 
                     {Resultarea.setText("除数不能为0");    
                   operation=""; 
                   pnum="";   
                   return;                    
                     } 
                   else 
                     display((count2.divide()));      
               }      
           } 
      }             
   operation="";  /*符号为当前符*/ 
   pnum=Resultarea.getText();/*运算数为当前文本数*/               
 }   
  public void display(double result)   /*显示输出方法*/ 
   {int a=(int)result; 
    if(a==result) 
       Resultarea.setText(String.valueOf(a)); 
    else 
       Resultarea.setText(String.valueOf(result)); 
    if(Resultarea.getText().equals("NaN")) 
      Resultarea.setText("输入函数无效");    
   }      
  private JPanel TextPanel;   /*文本框棉板*/ 
  private JTextField Resultarea;  /*文本框*/ 
  private JPanel ControlPanel;  /*控制键键面板*/ 
  private JPanel KeyPanel;      /*数字键和运算符键面板*/ 
  private Font font1=new Font("Dialog",0, 10);  /*控制键字体*/ 
  private Font font2 = new Font("Dialog",0,10); /*数字键和符号键字体*/  
  private String  pnum="";   /*前操作数*/ 
  private boolean isNew=true; /*控制是否是新数*/   
  private String operation="";    /*运算符*/ 
 } 
 class tester  /*测试类*/ 
{ 
  public static void main(String[] args) 
  { 
    new calculation(); 
  } 
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值