Java 簡易計(jì)算器

預(yù)想計(jì)算器圖為:


簡易計(jì)算器
如何實(shí)現(xiàn)?

1.畫出計(jì)算器框架圖
2.設(shè)置button的監(jiān)聽事件,在監(jiān)聽中實(shí)現(xiàn)將值傳入到JTextField面板上,并在觸發(fā)“+”等預(yù)算符時(shí)實(shí)現(xiàn)運(yùn)算

貼上代碼畫框代碼 用Java里的swing和awt


import javax.swing.*;
import java.awt.*;


public class CaculatorWindow extends JFrame {
    private final String names[] = {"7","8","9","+","4","5","6","-","1","2","3","*","0",".","=","/"};
    private JTextField textField;
    CaculatorWindow() {

        textField = new JTextField();
        GridLayout gridLayout = new GridLayout(4, 4);
        JPanel panel = new JPanel();//定義計(jì)算器下方面板
        panel.setLayout(gridLayout);
        JButton[] buttons = new JButton[names.length];
        for (int count = 0; count < names.length; count++) {
            buttons[count] = new JButton(names[count]);
            panel.add(buttons[count]);
        }
       
        //設(shè)置文本框位于窗體NORTH位置
        getContentPane().add(textField,BorderLayout.NORTH);
        //將面板放置在窗體CENTER位置
        getContentPane().add(panel,BorderLayout.CENTER);

        this.setTitle("Caculator");
        this.setBounds(80,80,300,200);
        this.setResizable(false);
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public static void main(String[] args) {
        new CaculatorWindow();
    }
}

再貼上實(shí)現(xiàn)監(jiān)聽和運(yùn)算過程代碼

 //數(shù)字按鈕的響應(yīng)事件
        class NumButtonHandler implements ActionListener{

            public void actionPerformed(ActionEvent event){
                JButton object = (JButton)event.getSource();
                char jButtonName = object.getText().charAt(0);
                switch (jButtonName){

                    default:
                        setTextField(jButtonName);
                        break;

                }

            }
            void setTextField(char jButttonName){
                textField.setText(textField.getText()+String.valueOf(jButttonName));//使得之前textField上的字不會被覆蓋
            }

        }
        //加減乘除等于的響應(yīng)事件
        class opeButtonHandler implements  ActionListener{
            public void actionPerformed(ActionEvent event){
                String command = event.getActionCommand();
                if(command.equals("+")){
                    temp = Double.parseDouble(textField.getText()); //用于保存運(yùn)算符號前一個數(shù)字
                    textField.setText("");
                    select = 1;
                }
                if(command.equals("-")){
                    temp = Double.parseDouble(textField.getText());
                    textField.setText("");
                    select = 2;
                }
                if(command.equals("*")){
                    temp = Double.parseDouble(textField.getText());
                    textField.setText("");
                    select = 3;
                }
                if(command.equals("/")){
                    temp = Double.parseDouble(textField.getText());
                    textField.setText("");
                    select = 4;
                }
                //在 = 處進(jìn)行+-*/事件處理
                if(command.equals("=")){
                    switch (select){
                        case 1:
                            number = Double.parseDouble(textField.getText());//用于保存運(yùn)算符號后一個數(shù)字
                            textField.setText((temp+number)+"");
                            break;
                        case 2:
                            number = Double.parseDouble(textField.getText());
                            textField.setText((temp-number)+"");
                            break;
                        case 3:
                            number = Double.parseDouble(textField.getText());
                            textField.setText((temp*number)+"");
                            break;
                        case 4:
                            number = Double.parseDouble(textField.getText());
                            textField.setText((temp/number)+"");
                            break;
                    }
                }
            }
        }

        NumButtonHandler numButtonHandler = new NumButtonHandler();
        for (int count = 0; count < names.length; count++) {
            if(count == 3 || count == 7 || count == 11  || count == 14 || count == 15)
                buttons[count].addActionListener(new opeButtonHandler());
            else
                buttons[count].addActionListener(numButtonHandler);
        }

貼上完整代碼

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class CaculatorWindow extends JFrame {
    private final String names[] = {"7","8","9","+","4","5","6","-","1","2","3","*","0",".","=","/"};
    private JTextField textField;
    private int select = 0;
    private double temp = 0.0;
    private double number;
    CaculatorWindow() {

        textField = new JTextField();
        GridLayout gridLayout = new GridLayout(4, 4);
        JPanel panel = new JPanel();//定義計(jì)算器下方面板
        panel.setLayout(gridLayout);
        JButton[] buttons = new JButton[names.length];
        for (int count = 0; count < names.length; count++) {
            buttons[count] = new JButton(names[count]);
            panel.add(buttons[count]);
        }
        //數(shù)字按鈕的響應(yīng)事件
        class NumButtonHandler implements ActionListener{

            public void actionPerformed(ActionEvent event){
                JButton object = (JButton)event.getSource();
                char jButtonName = object.getText().charAt(0);
                switch (jButtonName){

                    default:
                        setTextField(jButtonName);
                        break;

                }

            }
            void setTextField(char jButttonName){
                textField.setText(textField.getText()+String.valueOf(jButttonName));//使得之前textField上的字不會被覆蓋
            }

        }
        //加減乘除等于的響應(yīng)事件
        class opeButtonHandler implements  ActionListener{
            public void actionPerformed(ActionEvent event){
                String command = event.getActionCommand();
                if(command.equals("+")){
                    temp = Double.parseDouble(textField.getText()); //用于保存運(yùn)算符號前一個數(shù)字
                    textField.setText("");
                    select = 1;
                }
                if(command.equals("-")){
                    temp = Double.parseDouble(textField.getText());
                    textField.setText("");
                    select = 2;
                }
                if(command.equals("*")){
                    temp = Double.parseDouble(textField.getText());
                    textField.setText("");
                    select = 3;
                }
                if(command.equals("/")){
                    temp = Double.parseDouble(textField.getText());
                    textField.setText("");
                    select = 4;
                }
                //在 = 處進(jìn)行+-*/事件處理
                if(command.equals("=")){
                    switch (select){
                        case 1:
                            number = Double.parseDouble(textField.getText());//用于保存運(yùn)算符號后一個數(shù)字
                            textField.setText((temp+number)+"");
                            break;
                        case 2:
                            number = Double.parseDouble(textField.getText());
                            textField.setText((temp-number)+"");
                            break;
                        case 3:
                            number = Double.parseDouble(textField.getText());
                            textField.setText((temp*number)+"");
                            break;
                        case 4:
                            number = Double.parseDouble(textField.getText());
                            textField.setText((temp/number)+"");
                            break;
                    }
                }
            }
        }

        NumButtonHandler numButtonHandler = new NumButtonHandler();
        for (int count = 0; count < names.length; count++) {
            if(count == 3 || count == 7 || count == 11  || count == 14 || count == 15)
                buttons[count].addActionListener(new opeButtonHandler());
            else
                buttons[count].addActionListener(numButtonHandler);
        }
        //設(shè)置文本框位于窗體NORTH位置
        getContentPane().add(textField,BorderLayout.NORTH);
        //將面板放置在窗體CENTER位置
        getContentPane().add(panel,BorderLayout.CENTER);

        this.setTitle("Caculator");
        this.setBounds(80,80,300,200);
        this.setResizable(false);
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public static void main(String[] args) {
        new CaculatorWindow();
    }
}

現(xiàn)存問題
只能實(shí)現(xiàn)簡單的加減乘除運(yùn)算,并且在觸發(fā)運(yùn)算符時(shí)無法再JTextField上顯示運(yùn)算符,之前的數(shù)字也將消失
將要解決
即使觸發(fā)運(yùn)算符,也能保留之前輸入數(shù)字
能實(shí)現(xiàn)運(yùn)算符的優(yōu)先等級,在計(jì)算器面板中加入更多運(yùn)算符如%,(,)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法,可以作為本類的靜態(tài)方法來...
    XLsn0w閱讀 1,262評論 0 2
  • 面向?qū)ο笾饕槍γ嫦蜻^程。 面向過程的基本單元是函數(shù)。 什么是對象:EVERYTHING IS OBJECT(萬物...
    sinpi閱讀 1,088評論 0 4
  • 你知道失戀為什么那么痛苦嗎?記得一首歌里唱,我想我不僅僅是失去了你。 失戀意味著失去了一個親密的人,失去了對未來的...
    懶球?qū)殐?/span>閱讀 550評論 0 0
  • 人是天生就有安全感這東西的嗎? 當(dāng)你還是嬰兒的時(shí)候根本就不知道安全感它是什么。 當(dāng)你是孩提的時(shí)候 ,安全感或許就是...