小項目-Java開發簡單的計算機__Java

來源:互聯網
上載者:User

本項目課程使用 Java 語言完成了一個簡單的計算機。將使用到 Java Swing 圖形組件等等。


一、實驗簡介

本次實驗製作一個可以進行簡單的四則運算的計算機,會使用到 Java swing 進行開發。 1.1 知識點 Java Swing 介面編程 計算機邏輯運算實現 1.2 實驗環境介紹

本實驗環境採用帶案頭的 Ubuntu Linux 環境,實驗中會用到案頭上的程式: Eclipse:一個開放原始碼的、基於Java的可擴充開發平台,用於 Java 程式開發。 1.3 實驗完成效果圖

最終效果圖如下圖所示:

二、項目建立

請雙擊開啟案頭上的 eclipse ,等待啟動完成後,按照下面的步驟來建立項目。

如果你對該步驟已經非常熟悉,可以直接跳轉到下一小節學習。

(1)在檔案菜單 File 中選擇 New -> Project 來建立項目。

(2)在彈出的建立項目對話方塊中選擇 Java Project,並點擊 Next 按鈕進入下一步。

(3)在 Project name 一欄填寫項目名稱 Calculator,並點擊 Finish 按鈕完成建立。

(4)如果遇到下圖所示的對話方塊,點擊 Yes 按鈕確認即可。

(5)在建立好後的項目目錄 src 上右鍵點擊,在右鍵菜單中選擇 New -> Class 來建立一個類。

(6)在建立類對話方塊中填寫包名 com.shiyanlou.calculator 和類名 Calculator (首字母大寫)。點擊 Finish 按鈕完成建立。

(7)按照本課程後面的內容編輯 Calculator.java 檔案。 三、介面設計和實現

要製作一個計算機,首先需要知道它由哪些部分組成。

從結構上來說,一個簡單的圖形介面,需要由介面組件、組件的事件監聽器(響應各類事件的邏輯)和具體的事件處理邏輯組成。

整個代碼結構如下圖所示:

我們首先需要製作介面部分。這部分主要的工作就是建立各個介面組件對象,對其進行初始化,以及控制各組件之間的層次關係和布局。 3.1 UI 組件建立和初始化

首先我們需要將介面中要用到的 UI 組件作為 Calculator 類的成員變數在一開始聲明。在閱讀代碼之前,可以思考一下都要用到哪些 UI 組件,以及這些代碼應當寫在哪個位置等等。

    // 建立一個 JFrame 對象並初始化。JFrame 可以理解為程式的主表單。    JFrame frame = new JFrame("Calculator");    // 建立一個 JTestField 對象並初始化。 JTestField 是用於顯示操作和計算結果的文字框。    // 參數 20 表明可以顯示 20 列的常值內容    JTextField result_TextField = new JTextField(result, 20);    // 清除按鈕    JButton clear_Button = new JButton("Clear");    // 數字鍵0到9    JButton button0 = new JButton("0");    JButton button1 = new JButton("1");    JButton button2 = new JButton("2");    JButton button3 = new JButton("3");    JButton button4 = new JButton("4");    JButton button5 = new JButton("5");    JButton button6 = new JButton("6");    JButton button7 = new JButton("7");    JButton button8 = new JButton("8");    JButton button9 = new JButton("9");    // 計算命令按鈕,加減乘除以及小數點等    JButton button_Dian = new JButton(".");    JButton button_jia = new JButton("+");    JButton button_jian = new JButton("-");    JButton button_cheng = new JButton("*");    JButton button_chu = new JButton("/");    // 計算按鈕    JButton button_dy = new JButton("=");
3.2 在表單中添加 UI 組件

這個計算機有兩個 JPanel。

什麼是 JPanel:JPanel 是一般輕量級容器。如上圖所示,你可以將其理解為一個盛放其他 UI 組件的“籃子”。 JPanel 位於 javax.swing 包中,為面板容器,可以加入到 JFrame 中 , 它自身是個容器,也可以把其他 component (組件) 加入到 JPanel 中,例如 JButton、JTextArea、JTextField 等。

在這個項目中,兩個 JPanel 分別對應這個計算機按鍵除 “Clear” 鍵外其他的鍵,另個面板則是輸出欄跟 “Clear” 鍵(截取部分代碼)。

同樣,在書寫本段代碼時,你應當思考它應該放在哪個部分。如果不清楚,可以回到上面的代碼結構中查看。

可供參考的代碼如下所示:

        // 建立一個 Jpanel 對象並初始化        JPanel pan = new JPanel();        // 設定該容器的布局為四行四列,邊距為5像素        pan.setLayout(new GridLayout(4, 4, 5, 5));        // 將用於計算的按鈕添加到容器內        pan.add(button7);        pan.add(button8);        pan.add(button9);        pan.add(button_chu);        pan.add(button4);        pan.add(button5);        pan.add(button6);        pan.add(button_cheng);        pan.add(button1);        pan.add(button2);        pan.add(button3);        pan.add(button_jian);        pan.add(button0);        pan.add(button_Dian);        pan.add(button_dy);        pan.add(button_jia);        // 設定 pan 對象的邊距        pan.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));        // 按照同樣的方式設定第二個JPanel        JPanel pan2 = new JPanel();        pan2.setLayout(new BorderLayout());        pan2.add(result_TextField, BorderLayout.WEST);        pan2.add(clear_Button, BorderLayout.EAST);

布局結束後,就是計算機的痛點:事件處理常式。 四、添加事件響應邏輯

對於計算機而言,涉及到的事件響應邏輯主要有:數字鍵、加減乘除運算、小數點處理、等於以及清除。

請你思考一下,這裡的幾個開關狀態是用於什麼目的。

代碼如下(截取部分代碼,這裡是通過類方法處理的):

// 等於按鍵的邏輯,即在輸入完成後開始計算class Listener_dy implements ActionListener {            @SuppressWarnings("unchecked")        public void actionPerformed(ActionEvent e) {                store = (JButton) e.getSource();                vt.add(store);                yuns();                // 還原開關k1狀態                 k1 = 1;                 // 還原開關k2狀態                k2 = 1;                // 還原開關k3狀態                k3 = 1;                // 還原開關k4狀態                k4 = 1;                 // 為 7+5=12 +5=17 這種計算做準備                str1 = result;             }        }
五、計算邏輯的實現

計算的邏輯要針對輸入的不同運算子來對運算元進行運算,同時還要考慮到除以0這種不合理的演算法容錯。

主要代碼如下:

public void cal() {        // 運算元1        double a2;        // 運算元2        double b2;        // 運算子        String c = signal;        // 運算結果        double result2 = 0;        if (c.equals("")) {            result_TextField.setText("Please input operator.");        } else {            // 字串 "." 轉換成double型資料時,會出錯,所以自己編寫邏輯來轉換            if (str1.equals("."))                 str1 = "0.0";            if (str2.equals("."))                str2 = "0.0";            a2 = Double.valueOf(str1).doubleValue();            b2 = Double.valueOf(str2).doubleValue();            if (c.equals("+")) {                result2 = a2 + b2;            }            if (c.equals("-")) {                result2 = a2 - b2;            }            if (c.equals("*")) {                result2 = a2 * b2;            }            if (c.equals("/")) {                if (b2 == 0) {                    // 防止除0這種不合理的運算出現                    result2 = 0;                } else {                    result2 = a2 / b2;                }            }            result = ((new Double(result2)).toString());            result_TextField.setText(result);        }    }

至此,整個計算機的主要邏輯就已經講解完畢,請自行補充其他的細節。 六、項目完整源碼

整個程式完整的原始碼如下,相關的講解已在注釋中給出,請仔細閱讀。

package com.shiyanlou.calculator;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.Vector;public class Calculator {    // 運算元1,為了程式的安全,初值一定設定,這裡我們設定為0。    String str1 = "0";     // 運算元2    String str2 = "0";     // 運算子    String signal = "+";     // 運算結果    String result = "";    // 以下k1至k2為狀態開關    // 開關1用於選擇輸入方向,將要寫入str1或str2    int k1 = 1;    // 開關2用於記錄符號鍵的次數,如果 k2>1 說明進行的是 2+3-9+8 這樣的多符號運算    int k2 = 1;    // 開關3用於標識 str1 是否可以被清0 ,等於1時可以,不等於1時不能被清0    int k3 = 1;    // 開關4用於標識 str2 是否可以被清0    int k4 = 1;    // 開關5用於控制小數點可否被錄入,等於1時可以,不為1時,輸入的小數點被丟掉    int k5 = 1;    // store的作用類似於寄存器,用於記錄是否連續按下符號鍵    JButton store;     

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.