Java小项目---计算器

用Java实现一个简单的计算器, 用到java.swing包, 实现一个GUI的计算器.

swing包详解
代码如下:


import java.awt.FlowLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

public class Calculator {
    public static void main(String[] args) {
        Pane p = new Pane("Calculator");
        p.creatFrame();
    }
}

class Pane {
    String name;
    public final String button0 = "0";
    public final String button1 = "1";
    public final String button2 = "2";
    public final String button3 = "3";
    public final String button4 = "4";
    public final String button5 = "5";
    public final String button6 = "6";
    public final String button7 = "7";
    public final String button8 = "8";
    public final String button9 = "9";
    public final String button_add = "+";
    public final String button_sub = "-";
    public final String button_mul = "*";
    public final String button_div = "/";
    public final String button_dot = ".";
    public final String button_equ = "=";
    public final String button_del = "del";
    private double result;
    private String MidResult;
    TextField textField = new TextField(30);
    TextField textFieldResult = new TextField(30);
    Pane(String _name) {
        this.name = _name;
        this.result = 0;
        this.MidResult = "";
    }

    Pane() {
        this.result = 0;
        this.MidResult = "";
    }

    //对于button 的操作
    JButton ActionButtonInput(String buttonName) {
        JButton button = new JButton(buttonName);
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                MidResult += buttonName;
                textField.setText(MidResult);
                // System.out.println(buttonName);
            }
        });
        return button;
    }

    JButton ActionButtonEqu(String buttonName) {
        JButton button = new JButton(buttonName);
        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
                calculate();
                textFieldResult.setText(Double.toString(result));
            }
        });
        return button;
    }

    JButton DelButton(String buttonName) {
        JButton button = new JButton(buttonName);
        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
                result = 0;
                MidResult = "";
                textField.setText(MidResult);
                textFieldResult.setText("");
            }
        });
        return button;
    }

    //计算输入的字符串
    double calculate() {

        //得到输入字符串的数字和操作符
        String regex0 = "(\\+)|(\\-)|(\\*)|(\\/)";
        String regex1 = "[0-9]+|([0-9]+|[0-9]+\\.[0-9]+)";
        String array[] = MidResult.split(regex0);
        String operator[] = MidResult.split(regex1);
        String operator1[] = new String[operator.length];

        //格式化operator数组
        int j = 0;
        for(int i = 0; i < operator.length; ++i) {
            if(operator[i].equals("."));
            else operator1[j++] = operator[i];
        }

        //计算结果
        double tresult = 0;
        for (int i = 0; i < array.length; ++i) {
            if (i == 0) {
                tresult = Double.parseDouble(array[i]);
            }       
            else {
                if (operator1[i].equals("+"))
                    tresult += Double.parseDouble(array[i]);
                else if (operator1[i].equals("-"))
                    tresult -= Double.parseDouble(array[i]);
                else if (operator1[i].equals("*"))
                    tresult *= Double.parseDouble(array[i]);
                else if (operator1[i].equals("/"))
                    tresult /= Double.parseDouble(array[i]);
                else continue;
            }
        }
        this.result = tresult;
        return result;
    }

    //创建JFrame窗体
    void creatFrame() {
        JFrame frame = new JFrame(name);
        frame.setLayout(new FlowLayout(FlowLayout.CENTER));
        frame.setSize(250, 275);
        frame.setVisible(true); // set visible -- true
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // set exit on close


        JPanel panelButtonFeild01 = new JPanel();
        panelButtonFeild01.add(ActionButtonInput(button7));
        panelButtonFeild01.add(ActionButtonInput(button8));
        panelButtonFeild01.add(ActionButtonInput(button9));
        panelButtonFeild01.add(ActionButtonInput(button_div));

        JPanel panelButtonFeild02 = new JPanel();
        panelButtonFeild02.add(ActionButtonInput(button4));
        panelButtonFeild02.add(ActionButtonInput(button5));
        panelButtonFeild02.add(ActionButtonInput(button6));
        panelButtonFeild02.add(ActionButtonInput(button_mul));

        JPanel panelButtonFeild03 = new JPanel();
        panelButtonFeild03.add(ActionButtonInput(button1));
        panelButtonFeild03.add(ActionButtonInput(button2));
        panelButtonFeild03.add(ActionButtonInput(button3));
        panelButtonFeild03.add(ActionButtonInput(button_sub));

        JPanel panelButtonFeild04 = new JPanel();
        panelButtonFeild04.add(ActionButtonInput(button0));
        panelButtonFeild04.add(ActionButtonInput(button_dot));
        panelButtonFeild04.add(ActionButtonInput(button_add));
        // equal
        panelButtonFeild04.add(ActionButtonEqu(button_equ));

        JPanel panelButtonFeild05 = new JPanel();
        panelButtonFeild05.add(DelButton(button_del));
        // merger
        Box vbox = Box.createVerticalBox();
        vbox.add(textField);
        vbox.add(textFieldResult);
        vbox.add(panelButtonFeild01);
        vbox.add(panelButtonFeild02);
        vbox.add(panelButtonFeild03);
        vbox.add(panelButtonFeild04);
        vbox.add(panelButtonFeild05);
        frame.setContentPane(vbox);
        frame.pack();
    }

}

效果图:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_37753409/article/details/79762356
今日推荐