国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Java】Java使用Swing實現(xiàn)一個模擬計算器(有源碼)

這篇具有很好參考價值的文章主要介紹了【Java】Java使用Swing實現(xiàn)一個模擬計算器(有源碼)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【Java】Java使用Swing實現(xiàn)一個模擬計算器(有源碼),java,python,開發(fā)語言

????個人主頁:哈__

期待您的關注?

【Java】Java使用Swing實現(xiàn)一個模擬計算器(有源碼),java,python,開發(fā)語言

今天翻了翻之前寫的代碼,發(fā)現(xiàn)自己之前還寫了一個計算器,今天把我之前寫的代碼分享出來。

【Java】Java使用Swing實現(xiàn)一個模擬計算器(有源碼),java,python,開發(fā)語言

?我記得那會兒剛學不會寫,寫的亂七八糟,但拿來當期末作業(yè)還是不錯的哈哈。

直接上源碼,后上講解。

一、源碼

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.text.DecimalFormat;
import java.util.function.ToDoubleBiFunction;

public class MyCalculator  {
    private JFrame frame=new JFrame("CSDN--哈__");
    private String[] keys = {"%","C","CE","Back","1?x","X2","√x","÷","7","8","9",
            "X","4","5","6","-","1","2","3","+","+/-","0",".","="};//計算器的功能鍵保存
    private JButton [] buttons=new JButton[keys.length];//創(chuàng)建按鈕
    private JTextField resultText=new JTextField("0");//結果保存用于在計算器上顯示
    private double resultNum =0.0000;//用于保存運算的結果

    private boolean firstDigit=true;//判斷是否是第一個輸入的數(shù)字,或者是運算符后第一個數(shù)字
    private String operate ="=";//記錄當前的運算符
    private boolean opearteValidFlag =true;//判斷當前輸入是否合法



    //構造函數(shù)
    public MyCalculator(){
        frame.setLocation(300,200);
        frame.setSize(new Dimension(366,439));
        frame.setVisible(true);
        frame.setResizable(true);//窗口大小可修改
        //這里采用awt組件來關閉窗口  事件監(jiān)聽
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosed(WindowEvent e) {
                System.exit(0);
            }
        });
    }

    public void init(){
        //先定義三種顏色 用于背景板的填充  數(shù)值為網(wǎng)上查找
        Color c1=new Color(181,181,181);
        Color c2=new Color(126,192,238);
        Color c3=new Color(232,232,232);
        //計算器功能面板初始化
        JPanel pText =new JPanel();//用于保存文本域
        JPanel pKey =new JPanel();//用于保存功能按鍵
        //對文本域進行初始化
        pText.setLayout(new BorderLayout());
        pText.add(resultText);
        resultText.setFont(new Font("楷體",Font.BOLD,43));//設置文本框中字體的格式
        resultText.setHorizontalAlignment(JTextField.RIGHT);//文本框默認右對齊
        resultText.setEditable(false);//文本域不可編輯
        resultText.setBorder(null);//設置邊框為無
        resultText.setBackground(c1);
        //對功能案件進行初始化
        pKey.setLayout(new GridLayout(6,4,2,2)); //六行四列,相鄰兩個按鈕上下間隔均為兩個像素
        //開始在按鍵區(qū)加入前八個功能鍵
        for (int i = 0; i < 8; i++) {
            buttons[i]=new JButton(keys[i]);
            pKey.add(buttons[i]);
            buttons[i].setBackground(c3);
            buttons[i].setForeground(Color.BLACK);
            buttons[i].setFont(new Font(Font.SERIF,Font.PLAIN,18));
            buttons[i].setBorderPainted(false);//設置無邊框
            buttons[i].addActionListener(myActionListener);//添加監(jiān)聽器
        }
        for (int i = 8; i < keys.length; i++) {
            buttons[i]=new JButton(keys[i]);
            pKey.add(buttons[i]);
            if((i+1)%4==0)  buttons[i].setBackground(c3);
            else buttons[i].setBackground(Color.white);
            buttons[i].setForeground(Color.BLACK);
            buttons[i].setFont(new Font(Font.SERIF,Font.PLAIN,18));
            buttons[i].setBorderPainted(false);//設置無邊框
            buttons[i].addActionListener(myActionListener);//添加監(jiān)聽器
        }
        //最后將=號的背景色改為藍色,也就是c2
        buttons[keys.length-1].setBackground(c2);
        pKey.setBackground(c1);

        frame.add(pText,BorderLayout.NORTH);
        frame.add(pKey);
       /* pText.setBorder(BorderFactory.createMatteBorder(25,3,1,3,c1));
        pKey.setBorder(BorderFactory.createMatteBorder(6,3,3,3,c1));*/
    }
    public class MyActionListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            String key = e.getActionCommand();
            //對于具有清除刪除功能按鍵的處理(CE C BACK)
            if(key.equals(keys[1])||key.equals(keys[2])||key.equals(keys[3])){
                doDeleteKey(key);
            }
            //對只需要一個數(shù)值的按鍵處理(% 1/x x2 √x  +/-  )
            else if(key.equals(keys[0])||key.equals(keys[4])||key.equals(keys[5])||key.equals(keys[6])||
                    key.equals(keys[20])){
                doOperator1(key);

            }
            //對需要兩個數(shù)值的按鍵的處理(÷ X - += )
            else if(key.equals(keys[7])||key.equals(keys[11])||key.equals(keys[15])||key.equals(keys[19])||
                    key.equals(keys[23])){
                doOperator2(key);
            }
            //對數(shù)字按鍵進行處理(1 2 3 4 5 6 7 8 9 .)
            else{
                doNumberKey(key);
            }
        }
    }
    private void doDeleteKey(String key){
        if(key.equals("CE")){
            resultText.setText("0");
        }
        else if(key.equals("C")){
            resultText.setText("0");
            resultNum=0.0000;
            firstDigit=true;
            opearteValidFlag=true;
            operate="=";
        }
        else{
            String text=resultText.getText();
            if(text.length()>1){
                resultText.setText(text.substring(0,text.length()-1)); //如果內容長度大于1,那么直接刪掉最后一個字符
            }else{
                //內容長度等于1
                resultText.setText("0");
                firstDigit=true;
            }
        }
    }
    private void doOperator1(String key){
        //對只需要一個數(shù)值的按鍵處理(% 1/x x2 √x  +/-  )
        operate=key;
        if(operate.equals("%")){
            resultNum=getNumFromText()/100;
        }
        else if(operate.equals("1?x")){
            if(getNumFromText()==0){
                //System.out.println("0沒有倒數(shù)!");
                resultText.setText("零沒有倒數(shù)!");
                opearteValidFlag=false;
            }else{
                resultNum=resultNum+1.0/getNumFromText();
            }
        }
        else if(operate.equals("√x")){
            if(getNumFromText()<0){
                //System.out.println("負數(shù)不能開方!");
                resultText.setText("負數(shù)不能開方!");
                opearteValidFlag=false;
            }else{
                resultNum=resultNum+Math.sqrt(getNumFromText());
            }
        }
        else if(operate.equals("X2")){

            resultNum=resultNum+getNumFromText()*getNumFromText();
        }
        else if(key.equals("+/-")){
            resultNum=-getNumFromText();
            firstDigit=true;
            opearteValidFlag=true;
        }
    }
    //兩個數(shù)進行運算 ÷ X - + =
    private void doOperator2(String key){
        if(operate.equals("÷")){
            if(getNumFromText()==0){
                //System.out.println("零不能做除數(shù)!");
                resultText.setText("零不能做除數(shù)!");
                opearteValidFlag=false;
            }else{
                resultNum/=getNumFromText();
            }
        }
        else if(operate.equals("X")){
            resultNum*=getNumFromText();
        }
        else if(operate.equals("+")){
            resultNum+=getNumFromText();
        }
        else if(operate.equals("-")){
            resultNum-=getNumFromText();
        }
        else if(operate.equals("=")){
            resultNum=getNumFromText();
        }
        if(opearteValidFlag){
            long t1=(long)resultNum;
            double t2=resultNum-t1;
            if(t2==0){
                resultText.setText(String.valueOf(t1));
            }else{
                resultText.setText(String.valueOf(new DecimalFormat("0.0000").format(resultNum)));
            }
        }
        operate=key;
        firstDigit=true;
        opearteValidFlag=true;

    }
     private void doNumberKey(String key){
        //如果是第一個輸入的數(shù)字或者符號后第一個數(shù)字
        if(firstDigit){
            if(key.equals(".")) /*resultText.setText(resultText.getText()+".");*/{
                //上來直接按.  
                if(resultNum==0&&operate=="=") resultText.setText(resultText.getText()+".");
                //上來先按了個別的運算符 在按.
                else{
                    resultText.setText("0.");
                   // resultText.setText("出錯!");
                    //opearteValidFlag=false;
                }
            }
            else resultText.setText(key);
        }else if(key.equals(".")&&resultText.getText().indexOf(".")<0){
            resultText.setText(resultText.getText()+".");
        }else if(!key.equals(".")){
            resultText.setText(resultText.getText()+key);
        }
        firstDigit=false;
    }
   private double getNumFromText(){
       double result = 0;
       try {
           result = Double.valueOf(resultText.getText()).doubleValue();
       } catch (NumberFormatException e) {
       }
       return result;

    }
    MyActionListener myActionListener=new MyActionListener();
    public static void main(String[] args) {
        new MyCalculator().init();
    }
}

二、講解

1、創(chuàng)建我們所需的變量

計算器上的按鍵不少,我們都定義在一個keys數(shù)組當中,并且初始化一個buttons按鈕數(shù)組。

除了我們的按鈕之外,還有我們的輸出顯示窗口resultText,輸出的結果我們都用resultNum來記錄,之后在放到我們的輸出窗口上。

其他的都寫成注解了。

private JFrame frame=new JFrame("CSDN--哈__");
    private String[] keys = {"%","C","CE","Back","1?x","X2","√x","÷","7","8","9",
            "X","4","5","6","-","1","2","3","+","+/-","0",".","="};//計算器的功能鍵保存
    private JButton [] buttons=new JButton[keys.length];//創(chuàng)建按鈕
    private JTextField resultText=new JTextField("0");//結果保存用于在計算器上顯示
    private double resultNum =0.0000;//用于保存運算的結果

    private boolean firstDigit=true;//判斷是否是第一個輸入的數(shù)字,或者是運算符后第一個數(shù)字
    private String operate ="=";//記錄當前的運算符
    private boolean opearteValidFlag =true;//判斷當前輸入是否合法

2.面板初始化

面板初始化就是init方法,注釋我都寫了,這里不在講了,也沒啥重要的,就是美化一下面板。

3.添加按鈕事件監(jiān)聽機制

當我們點擊計算機上的按鈕的時候,計算器要給出反饋,這時就需要我們添加一個事件監(jiān)聽機制了。注釋寫好了,當我們點擊不同的按鈕的時候要處理不同的功能。

 public class MyActionListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            String key = e.getActionCommand();
            //對于具有清除刪除功能按鍵的處理(CE C BACK)
            if(key.equals(keys[1])||key.equals(keys[2])||key.equals(keys[3])){
                doDeleteKey(key);
            }
            //對只需要一個數(shù)值的按鍵處理(% 1/x x2 √x  +/-  )
            else if(key.equals(keys[0])||key.equals(keys[4])||key.equals(keys[5])||key.equals(keys[6])||
                    key.equals(keys[20])){
                doOperator1(key);

            }
            //對需要兩個數(shù)值的按鍵的處理(÷ X - += )
            else if(key.equals(keys[7])||key.equals(keys[11])||key.equals(keys[15])||key.equals(keys[19])||
                    key.equals(keys[23])){
                doOperator2(key);
            }
            //對數(shù)字按鍵進行處理(1 2 3 4 5 6 7 8 9 .)
            else{
                doNumberKey(key);
            }
        }
    }

4.處理對于具有清除刪除功能按鍵的處理(CE C BACK)

計算器上有個清空按鍵C大家都用過吧,點了這個C之后我們所有的輸入都會被初始化。倘若點了退格鍵那我們就把面板上的文字域刪掉一個符號。比如我們輸入的是111,點了退格之后就是11,當然你會想這只是文字域的變化,那我們保存的要計算的值為什么不變?別著急,真正開始計算是在我們點擊了加減乘除這一類的符號的時候才會從面板讀取值的。

 private void doDeleteKey(String key){
        if(key.equals("CE")){
            resultText.setText("0");
        }
        else if(key.equals("C")){
            resultText.setText("0");
            resultNum=0.0000;
            firstDigit=true;
            opearteValidFlag=true;
            operate="=";
        }
        else{
            String text=resultText.getText();
            if(text.length()>1){
                resultText.setText(text.substring(0,text.length()-1)); //如果內容長度大于1,那么直接刪掉最后一個字符
            }else{
                //內容長度等于1
                resultText.setText("0");
                firstDigit=true;
            }
        }
    }

5.兩個數(shù)進行運算加減乘除

上來先判斷你當前的的符號是什么,并且也進行了一些錯誤情況的判斷,如除數(shù)不能為0什么的。

下邊你就能看到我們的resultNum被使用了。最后來個操作是否合法判斷,如果合法并且輸出結果最后是0那我們直接就把0輸出到面板上,但是倘若我們的輸出結果有精度差,那我們就得自己將0放到面板上了。

注:我使用的浮點數(shù)計算并不是BigDecimal,所以存在精度差。

private void doOperator2(String key){
        if(operate.equals("÷")){
            if(getNumFromText()==0){
                //System.out.println("零不能做除數(shù)!");
                resultText.setText("零不能做除數(shù)!");
                opearteValidFlag=false;
            }else{
                resultNum/=getNumFromText();
            }
        }
        else if(operate.equals("X")){
            resultNum*=getNumFromText();
        }
        else if(operate.equals("+")){
            resultNum+=getNumFromText();
        }
        else if(operate.equals("-")){
            resultNum-=getNumFromText();
        }
        else if(operate.equals("=")){
            resultNum=getNumFromText();
        }
        if(opearteValidFlag){
            long t1=(long)resultNum;
            double t2=resultNum-t1;
            if(t2==0){
                resultText.setText(String.valueOf(t1));
            }else{
                resultText.setText(String.valueOf(new DecimalFormat("0.0000").format(resultNum)));
            }
        }
        operate=key;
        firstDigit=true;
        opearteValidFlag=true;

    }

?剩下的大家自己研究吧。文章來源地址http://www.zghlxwxcb.cn/news/detail-847748.html

到了這里,關于【Java】Java使用Swing實現(xiàn)一個模擬計算器(有源碼)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Java——一個簡單的計算器程序

    Java——一個簡單的計算器程序

    ? 該代碼是一個簡單的計算器程序,使用了Java的圖形化界面庫Swing。具體分析如下: 導入必要的類和包: 代碼中導入了用于創(chuàng)建圖形界面的類和接口,以及其他必要的類。 定義Calculator類: 代碼中定義了一個名為Calculator的類,繼承了JFrame類,并實現(xiàn)了ActionListener接口。Calc

    2024年02月04日
    瀏覽(21)
  • Java設計一個簡單的計算器程序

    計算器是一種常見的工具,用于進行基本數(shù)學運算。在計算機科學中,我們可以使用編程語言來模擬和實現(xiàn)一個計算器程序。本文將基于Java語言,設計并實現(xiàn)一個簡單的計算器程序。 1. 需求分析 在設計計算器程序之前,我們需要明確程序的需求。本文設計的計算器程序應滿

    2024年02月05日
    瀏覽(39)
  • 用代碼實現(xiàn)一個簡單計算器

    用代碼實現(xiàn)一個簡單計算器

    作者主頁: paper jie的博客_CSDN博客-C語言,算法詳解領域博主 本文作者: 大家好,我是paper jie,感謝你閱讀本文,歡迎一建三連哦。 本文錄入于 《C語言》專欄,本專欄是針對于大學生,編程小白精心打造的。筆者用重金(時間和精力)打造,將C語言基礎知識一網(wǎng)打盡,希望可

    2024年02月08日
    瀏覽(28)
  • 【C++小項目】實現(xiàn)一個日期計算器

    【C++小項目】實現(xiàn)一個日期計算器

    目錄 Ⅰ. 引入 Ⅱ. 列輪廓 Ⅲ. 功能的實現(xiàn) 構造函數(shù) Print 判斷是否相等 == | != ??==: ??!=: 判斷大小 | = | | = ??: ??=: ??=: ??: 加減天數(shù) + | += | - | -= ??+=: ??+: ??-: ??-=: 自增/自減 ++ | -- ??前置++ ??后置++ ??前置-- ??后置-- 日期減日期 ?

    2024年02月11日
    瀏覽(26)
  • 使用 JavaScript 創(chuàng)建一個簡單的計算器

    介紹: JavaScript 是一種廣泛應用于網(wǎng)頁開發(fā)的腳本語言,它具有靈活、動態(tài)和強大的特性。本文將演示如何使用 JavaScript 創(chuàng)建一個簡單的計算器,并實現(xiàn)基本的加減乘除操作。 正文: javascript 解釋: 以上代碼是一個簡單的 HTML 頁面,其中包括兩個輸入框和四個按鈕,用于實

    2024年02月03日
    瀏覽(30)
  • 使用C語言構造一個簡單計算器

    使用C語言構造一個簡單計算器

    本節(jié)我們用小學生知識來制作一個簡單的計算器,可以運算加,減,乘,除,以及余數(shù)的運算。 在這節(jié)代碼中用到switch語句,因為要輸入運算符,所以注意%c的對應 接下來上代碼: 這里的話我們簡單演示一下乘法的運算: 如果用其他的計算符號直接更改即可,這里使用雙精

    2024年02月12日
    瀏覽(26)
  • HTML和JavaScript實現(xiàn)一個簡單的計算器

    HTML和JavaScript實現(xiàn)一個簡單的計算器

    使用HTML和JavaScript實現(xiàn)一個簡單的計算器。 這段代碼會在瀏覽器中創(chuàng)建一個標題為\\\"Simple Calculator\\\"的頁面。頁面頂部有一個 h1 元素,用于顯示標題。計算器界面使用了CSS網(wǎng)格布局,將按鈕排列為4列。 在JavaScript部分,定義了一些函數(shù)來處理計算器的操作。 appendCharacter() 函數(shù)用

    2024年02月13日
    瀏覽(35)
  • 【Servlet學習三】實現(xiàn)一個內存版本的簡易計算器~

    【Servlet學習三】實現(xiàn)一個內存版本的簡易計算器~

    目錄 一、方式1:使用form表單的形式(不推薦) ??1、前端代碼:HTML文件 ??2、后端代碼:Calculator_form.java文件 ??3、最終效果 二、方式2:使用ajax形式(最常用重點?。。。???1、前端代碼:HTML文件 ??2、后端代碼:Calculator_ajax.java文件 ??3、最終效果 ?注意: (1)前端

    2024年02月12日
    瀏覽(21)
  • 用JavaScript和HTML實現(xiàn)一個精美的計算器

    用JavaScript和HTML實現(xiàn)一個精美的計算器

    計算器是我們日常生活中經(jīng)常使用的工具之一,可以幫助我們進行簡單的數(shù)學運算。在本博文中,我將使用JavaScript編寫一個漂亮的計算器,并添加加減乘除功能。這個計算器將有一個精美的用戶界面,包含9個數(shù)字按鈕和加減乘除操作符。 HTML:負責構建界面 CSS:負責美化界

    2024年02月15日
    瀏覽(29)
  • Java 實現(xiàn)計算器

    Java 實現(xiàn)計算器

    *使用Java語言編寫一個能實現(xiàn)“加、減、乘、除”四則運算的計算器程序。* 要求: (1)在程序中要體現(xiàn)面向對象編程語言的三大特征:封裝、繼承和多態(tài)。 (2)該程序要易于擴展和復用。以后可以方便地增加新的運算;程序的業(yè)務邏輯與界面部分要實現(xiàn)分離,便于業(yè)務邏

    2024年02月12日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包