1. 程式人生 > >java元件——實現一個計算器

java元件——實現一個計算器

package com.tulun.dao;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Stack;

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;

/**
 * @ClassName Count
 * @Description 計算器
 * @Author lzq
 * @Date 2018/12/21 11:02
 * @Version 1.0
 **/
public class Count extends JApplet implements ActionListener {
    private static final long serialVersionUID = 1L;
    private JTextField textField = new JTextField("請輸入");
    String input = "";//輸入的 式子


    /**
     * 覆寫Applet裡邊的init方法
     */
    public void init() {
        Container C = getContentPane();
        JButton b[] = new JButton[16];
        JPanel panel = new JPanel();
        C.add(textField, BorderLayout.NORTH);
        C.add(panel, BorderLayout.CENTER);
        panel.setLayout(new GridLayout(4, 4, 5, 5));
        String name[] = {"7", "8", "9", "+", "4", "5", "6", "-", "1", "2", "3", "*", "0", "C", "=", "/"};//設定 按鈕
        //新增按鈕
        for (int i = 0; i < 16; i++) {
            b[i] = new JButton(name[i]);
            b[i].setBackground(new Color(192, 192, 192));
            b[i].setForeground(Color.BLUE);//數字鍵 設定為 藍顏色
            if (i % 4 == 3) {
                b[i].setForeground(Color.RED);
            }
            b[i].setFont(new Font("宋體", Font.PLAIN, 16));//設定字型格式
            panel.add(b[i]);
            b[i].addActionListener(this);
        }
        b[13].setForeground(Color.RED);//非數字鍵,即運算鍵設定為紅顏色
        b[13].setForeground(Color.RED);
    }

    /**
     * 處理按鈕單擊方法
     * @param e
     */
    @Override
    public void actionPerformed(ActionEvent e) {
        int cnt = 0;
        String actionCommand = e.getActionCommand();
        if (actionCommand.equals("+") || actionCommand.equals("-") ||
                actionCommand.equals("*") || actionCommand.equals("/")) {
            input += " " + actionCommand + " ";//設定輸入,把輸入的樣式改成 需要的樣子
        } else if (actionCommand.equals("C")) {
            input = "";
        } else if (actionCommand.equals("=")) {//當監聽到等號時,則處理 input
            input += "=" + compute(input);
            textField.setText(input);
            input = "";
            cnt = 1;
        } else {
            input += actionCommand;//數字為了避免多位數的輸入 不需要加空格
        }
        if (cnt == 0) {
            textField.setText(input);
        }
    }

    /**
     * 計算
     * @param input
     * @return
     */
    private String compute(String input) {
        String str[];
        str = input.split(" ");
        Stack<Double> s = new Stack<Double>();
        double m = Double.parseDouble(str[0]);
        s.push(m);
        for (int i = 1; i < str.length; i++) {
            if (i % 2 == 1) {
                if (str[i].compareTo("+") == 0) {
                    double help = Double.parseDouble(str[i + 1]);
                    s.push(help);
                }

                if (str[i].compareTo("-") == 0) {
                    double help = Double.parseDouble(str[i + 1]);
                    s.push(-help);
                }

                if (str[i].compareTo("*") == 0) {
                    double help = Double.parseDouble(str[i + 1]);
                    double ans = s.peek();//取出棧頂元素
                    s.pop();//消棧
                    ans *= help;
                    s.push(ans);
                }

                if (str[i].compareTo("/") == 0) {
                    double help = Double.parseDouble(str[i + 1]);
                    double ans = s.peek();
                    s.pop();
                    ans /= help;
                    s.push(ans);
                }
            }
        }
        double ans = 0d;
        while(!s.isEmpty()){
            ans+=s.peek();
            s.pop();
        }
        String result = String.valueOf(ans);
        return result;
    }
}
package com.tulun.main;

import com.tulun.dao.Count;

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

/**
 * @ClassName TestDemo5
 * @Description 計算器測試類
 * @Author lzq
 * @Date 2018/12/21 11:11
 * @Version 1.0
 **/
public class TestDemo5 {
    public static void main(String args[]){
        JFrame frame = new JFrame("Count");
        Count applet = new Count();
        frame.getContentPane().add(applet, BorderLayout.CENTER);
        applet.init();//applet的init方法
        applet.start();//執行緒開始
        frame.setSize(350, 400);//設定視窗大小
        frame.setVisible(true);//設定視窗可見
    }
}

執行結果:
在這裡插入圖片描述