計算器

計算器


      運用Java語言和NetBeans工具設計一個簡易的計算器,計算器看似簡單,其中各種功能的實現需要涉及很多知識點,下面我來簡單的闡述一下設計計算器的步驟以及遇到的一些問題。

一、設計計算器的步驟

  1、打開NetBeans,文件-新建-在類別中選擇Java-下一步-寫上項目名(caculator)選擇項目位置-點擊完成。

  2、選中caculator包右擊,新建-JFrame窗體,在設計界面設計計算器的界面,步驟如下:先放入一個拆分窗格,然後依次放入一個文本字段和十八個按鈕,佈局好後,分別選中按鈕,右擊設置按鈕的變量名稱和按鈕上的文本,設置完如下圖。


3、實現計算器各種功能的代碼

在JFrame下先創建一個setNum方法,然後依次右擊按鈕-事件-Mouse-mouseReleased,添加鼠標的釋放事件的方法,並在各個按鈕的釋放事件方法中使用setNum()調用JFrame中的setNum()方法。即可實現點擊按鈕相應的數字能進入JTextField文本域中。

setNum()方法的代碼如下:

//創建setNum方法

        public void setNum(String str){

            //獲得顯示文本內容保存到strText

            String strText=jTextField1.getText();  

             //如果文本內容是0,那麼改爲str,否則追加

            if(strText.equals("0")){

               jTextField1.setText(str);

            }else{   //追加

                //使用構造方法初始化StringBuffer,並賦值strText

                StringBuffer strBuf=new StringBuffer(strText);

                //追加str到當前StringBuffer對象(strText)的末尾

                strBuf.append(str);  //追加str

                //重新設置文本內容爲strBuf

                jTextField1.setText(strBuf.toString());

               // jTextField1.setText(strText+str);

            }

        }    

上面的功能實現後,設置等於的MouseReleased事件的方法,實現點擊等於時,將計算結果顯示在文本域中。代碼如下:

 //等於

    private void dengyuMouseReleased(java.awt.event.MouseEvent evt) {                                     

        // TODO add your handling code here:

        /*ScriptEngineManager 爲 ScriptEngine 類實現一個發現和實例化機制,

          還維護一個鍵/值對集合來存儲所有 Manager 創建的引擎所共享的狀態。

         */

        ScriptEngineManager manager=new   ScriptEngineManager(); 

        //查找並創建一個給定名稱的 ScriptEngine

        ScriptEngine se=manager.getEngineByName("js");

        Double result=null;

        try {

             result=(Double) se.eval("("+jTextField1.getText()+")*1.0");

        } catch (ScriptException ex) {

            Logger.getLogger(JFrame.class.getName()).log(Level.SEVERE, null, ex);

        }

            jTextField1.setText(result.toString());

    }                                   

4、實現回退的功能,設置回退按鈕的MouseReleased事件的方法,該按鈕實現當點擊該按鈕時,文本域中刪除一個字符。

代碼如下://箭頭

    private void jiantouMouseReleased(java.awt.event.MouseEvent evt) {                                      

        // TODO add your handling code here:

        //獲得顯示文本內容保存到strText

        String strText=jTextField1.getText();

        //判斷strText的長度

        if(strText.length()>1){

            StringBuffer strBuf=new StringBuffer(strText);

            //刪除指定位置的字符,然後將剩餘的內容形成新的字符串。

            strBuf.deleteCharAt(strBuf.length()-1);

            jTextField1.setText(strBuf.toString());

        }else{  

            jTextField1.setText("0");

        }

}    

5、實現清空的功能,設置清空按鈕的MouseReleased事件的方法,該按鈕實現當點擊該按鈕時,文本域中的字符被清空。

代碼如下:

 //清空

    private void qingkongMouseReleased(java.awt.event.MouseEvent evt) {                                       

        // TODO add your handling code here:

        jTextField1.setText("0"); 

}           

6、規範運算符,在JFrame下先創建一個setYSF()方法,該方法實現當點擊一個運算符時,發現點錯,想點擊正確的運算符能直接實現運算符的切換功能。代碼如下:

    //規範運算符

        public void setYSF(String str){

            //取出當前顯示的內容放到字符串變量strText中 

            String strText=jTextField1.getText();

            //判斷strText中字符串的最右邊一位是否爲運算符

         /* 如果(最右邊是運算符){

              //替換strText最右邊的運算符爲當前按鍵str

              //strText放回文本框

            }否則{

                //strText追加當前的str

                //strText放回

            }*/

            int lastRight=strText.length()-1;  //當前字符串的長度-1

            char ch=strText.charAt(lastRight); //ch存放最右邊的一個字符

            if(ch=='+'||ch=='-'|| ch=='*' ||ch=='/'){

                //替換strText最右邊的運算符爲當前按鍵str,比如"1234","123"

                String strResult=strText.substring(0,lastRight)+str;

                //strText,strResult放回文本框

                jTextField1.setText(strResult);

            }else{

                 //strText追加當前的str

                //strText放回

                jTextField1.setText(strText+str);

            }

        }    

7、美化計算器的界面。爲了計算器的外觀更美觀, 可以給計算器添加背景圖片。步驟如下:

 在JFrame-導航器中,選中JFrame,右擊 從組件面板上添加-Swing容器-分層窗格、面板1和麪板2。將計算器中的組件放入面板1中,將圖片放入面板2中。在面板2中添加jLabel,選中jLabel右擊屬性,找到icon-點擊-彈出如下的界面    

     選擇外部圖像,將提前找好的圖片導入到項目中,然後選擇項目內的圖像,選中圖像。回到設計界面,分別設置分層窗體、面板1、面板2和圖片的大小。設置完成後,運行項目,如下圖:

8、附加功能:在此基礎上,爲了使鼠標經過按鈕時變色,分別給按鈕添加了MouseExited和MouseEntered的事件,在JFrame下先創建 mouseEnter和mouseExited方法,鼠標進入按鈕和離開按鈕時分別調用這兩個方法,代碼如下:

  public void mouseEnter(int color){

             JButton b[]=new JButton[]

            {zero,one,two,three,four,five,six,serven,eight,nine,point,jia,jian,cheng,chu,jiantou,qingkong,dengyu};

            for(int i = 0;i<b.length;i++){

                  b[i].setBackground(Color.YELLOW);

             }

             //one.setBackground(Color.orange);

        }

        public void mouseExited(int color){

            JButton b[]=new JButton[]

            {zero,one,two,three,four,five,six,serven,eight,nine,point,jia,jian,cheng,chu,jiantou,qingkong,dengyu};

            for(int i = 0;i<b.length;i++){

                 b[i].setBackground(Color.getColor(""));

             } 

      // one.setBackground(Color.getColor(""));

        }

    該方法實現實現了當鼠標進入其中任何一個按鈕時,所有的按鈕變色,當離開按鈕時,按鈕恢復爲原來的顏色。

二、問題總結

   在開始設計計算器的時候,認爲計算器很簡單,但當實際操作時,會發現很多問題。比如在一開始的界面設計時,按鈕的位置和大小的調整,這個地方要很有耐心的調整按鈕到合適的位置。在實現計算器的功能時,學到了很多新的知識,比如StringBuffer類的使用:StringBuffer對象的初始化

StringBuffer對象的初始化不像String類的初始化一樣,Java提供的有特殊的語法,而通常情況下一般使用構造方法進行初始化。

例如:StringBuffer s = new StringBuffer();

這樣初始化出的StringBuffer對象是一個空的對象。

如果需要創建帶有內容的StringBuffer對象,則可以使用:

  StringBuffer s = new StringBuffer(“abc”);

這樣初始化出的StringBuffer對象的內容就是字符串”abc”。

需要注意的是,StringBuffer和String屬於不同的類型,也不能直接進行強制類型轉換,下面的代碼都是錯誤的:

StringBuffer s = “abc”;  //賦值類型不匹配

StringBuffer s = (StringBuffer)”abc”; //不存在繼承關係,無法進行強轉

StringBuffer對象和String對象之間的互轉的代碼如下:

String s = “abc”;

StringBuffer sb1 = new StringBuffer(“123”);

StringBuffer sb2 = new StringBuffer(s);   //String轉換爲StringBuffer

String s1 = sb1.toString();   //StringBuffer轉換爲String

       總之,在設計過程中遇到了很多問題也學到了一些類和方法的使用,我覺得這對以後的學習會有很大的幫助。當然,我會再接再厲,努力掌握好基礎知識,才能在以後的項目設計中更輕鬆。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章