1. 程式人生 > 實用技巧 >【Java】使用swing實現簡易計算器

【Java】使用swing實現簡易計算器

這個計算器簡單實現了加減乘除功能,平方、開根等額外功能可以自己再增加,每次輸出只能計算一個等式,即只能計算2個運算元。

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

public class Calculator {
    public static void main(String[] args) {
        CalcuFrame f = new CalcuFrame("【小氫計算器】");
    }
}
class CalcuFrame extends JFrame implements java.awt.event.ActionListener{
    JTextField input;
    JButton[] btn = new JButton[16];
    JButton ACBtn = new JButton("清空");
    String[] name = {"7","8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "+", "0", ".", "=", "-"};

    public CalcuFrame(String str) {
        JPanel pNorth = new JPanel();
        JPanel pCenter=new JPanel();


        input = new JTextField("", 20);
        ACBtn.addActionListener(this);


        //將文字框與清空按鈕加入pNorth
        ACBtn.setForeground(Color.RED);
        pNorth.add(input);
        pNorth.add(ACBtn, BorderLayout.EAST);

        //將數字、操作符按鈕加入pCenter
        for(int i = 0; i < btn.length; i++) {
            btn[i] = new JButton(name[i]);
            btn[i].setForeground(Color.BLUE);
            if(i == 3 || i == 7 || i == 11 || i == 15) btn[i].setForeground(Color.GREEN);
            //btn[i].setBorder(new SoftBevelBorder(BevelBorder.RAISED));
            pCenter.add(btn[i]);
            btn[i].addActionListener(this); //新增事件監聽器
        }
        pCenter.setLayout(new GridLayout(4, 4));

        //將pNorth、pCenter加入CalcuFrame
        add(pNorth, BorderLayout.NORTH);
        add(pCenter, BorderLayout.CENTER);
        //設定CalcuFrame的樣式
        setTitle(str);
        setBounds(150,150,300,180);
        setVisible(true);
        validate();
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    }

    public void actionPerformed(ActionEvent e) {
        JButton b = (JButton)e.getSource();  //得到當前的按鈕物件
        String s = b.getText(); //得到按鈕物件上的標識字元

        if(s.equals("=")){   //如果是等號按鈕,解析字串並計算然後把結果顯示在文字輸入框
            String res = parseString(input.getText());
            if(res != null)
            {
                input.setText(res);
            }
            return;
        }
        if(b == ACBtn){  //如果按下了清除按鈕,則文字輸入框清除為空
            input.setText("");
            return;
        }
        //如果是其他按鈕(數字按鈕或運算子號按鈕)則把數字或運算子顯示在文字框中
        String sTemp = input.getText();
        sTemp = sTemp + b.getText();
        input.setText(sTemp);
    }
    public String parseString(String s){
        String op1,op2;
        double o1,o2,re = 0;
        int p=s.indexOf('+'); //查詢加號位置,如果找到(if(p!=-1))則取加號前面子串為運算元1,取加號後面子串為運算元2,
                                // 轉換運算元1和運算元2為浮點型別,並進行加法運算,最後把結果返回
        if(p == -1) p= s.indexOf('-');//查詢減號號位置,.....(處理類同與加號)
        if(p == -1) p= s.indexOf('*');//查詢乘號號位置,.....(處理類同與加號)
        if(p == -1) p= s.indexOf('/');//查詢除號號位置,.....(處理類同與加號)
        if(p == -1) return "輸入有誤!";

        op1 = s.substring(0, p);
        op2 = s.substring(p+1);
        o1 = Double.parseDouble(op1);
        o2 = Double.parseDouble(op2);

        char c = s.charAt(p);
        if(c == '+') re = o1 + o2;
        else if(c == '-') re = o1 - o2;
        else if(c == '*') re = o1 * o2;
        else if(c == '/') {
            if(o2 == 0) return "輸入有誤!";
            else re = o1 / o2;
        }
        return String.valueOf(re);
    }
}