java計算機來源程式

來源:互聯網
上載者:User

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();
  }
}   

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.