JAVA实现一个计算器(GUI编程)

计算器代码1.2版本

package org.example;

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

public class calculator extends JFrame implements ActionListener {
    StringBuilder builder = new StringBuilder();

    JTextField textField = new JTextField(15);
    JButton but_0 = new JButton("0");
    JButton but_1 = new JButton("1");
    JButton but_2 = new JButton("2");
    JButton but_3 = new JButton("3");
    JButton but_4 = new JButton("4");
    JButton but_5 = new JButton("5");
    JButton but_6 = new JButton("6");
    JButton but_7 = new JButton("7");
    JButton but_8 = new JButton("8");
    JButton but_9 = new JButton("9");
    JButton but_add = new JButton("+");
    JButton but_sub = new JButton("-");
    JButton but_mul = new JButton("*");
    JButton but_div = new JButton("/");
    JButton but_c = new JButton("c");
    JButton but_b = new JButton("b");
    JButton but_sin = new JButton("sin");
    JButton but_cos = new JButton("cos");
    JButton but_sqrt = new JButton("sqrt");
    JButton but_x2 = new JButton("X2");
    JButton but_equal = new JButton("=");

    JPanel panel1 = new JPanel(new GridLayout(9,3));

    public  calculator(){
        this.setTitle("标准计算器");
        this.setLayout(new FlowLayout());
        //设置容器显示的位置和大小
        this.setBounds(700,300,400,400);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //设置按钮文字的大小
        Font font = new Font("Arial", Font.BOLD, 18);
        but_0.setFont(font);
        but_1.setFont(font);
        but_2.setFont(font);
        but_3.setFont(font);
        but_4.setFont(font);
        but_5.setFont(font);
        but_6.setFont(font);
        but_7.setFont(font);
        but_8.setFont(font);
        but_9.setFont(font);
        but_add.setFont(font);
        but_sub.setFont(font);
        but_mul.setFont(font);
        but_div.setFont(font);
        but_c.setFont(font);
        but_b.setFont(font);
        but_sin.setFont(font);
        but_cos.setFont(font);
        but_x2.setFont(font);
        but_sqrt.setFont(font);
        but_equal.setFont(font);

        panel1.add(but_0);
        panel1.add(but_1);
        panel1.add(but_2);
        panel1.add(but_3);
        panel1.add(but_4);
        panel1.add(but_5);
        panel1.add(but_6);
        panel1.add(but_7);
        panel1.add(but_8);
        panel1.add(but_9);
        panel1.add(but_add);
        panel1.add(but_sub);
        panel1.add(but_mul);
        panel1.add(but_div);
        panel1.add(but_c);
        panel1.add(but_b);
        panel1.add(but_sin);
        panel1.add(but_cos);
        panel1.add(but_x2);
        panel1.add(but_sqrt);
        panel1.add(but_equal);
        textField.setEditable(false);
        //设置文本框大小
        textField.setPreferredSize(new Dimension(200, 30));
        textField.setFont(font);
        this.add(textField);
        this.add(panel1);

        but_0.addActionListener(this);
        but_1.addActionListener(this);
        but_2.addActionListener(this);
        but_3.addActionListener(this);
        but_4.addActionListener(this);
        but_5.addActionListener(this);
        but_6.addActionListener(this);
        but_7.addActionListener(this);
        but_8.addActionListener(this);
        but_9.addActionListener(this);
        but_add.addActionListener(this);
        but_sub.addActionListener(this);
        but_mul.addActionListener(this);
        but_div.addActionListener(this);
        but_c.addActionListener(this);
        but_b.addActionListener(this);
        but_sin.addActionListener(this);
        but_cos.addActionListener(this);
        but_x2.addActionListener(this);
        but_sqrt.addActionListener(this);
        but_equal.addActionListener(this);

    }

    public void actionPerformed(ActionEvent e){
        String str = e.getActionCommand();
        double a,b;
        String string;
        string=builder.substring(0, builder.length());
        if("=".equals(str)){
            if ((-1)!=builder.indexOf("+")){//判断是否是+号,是的话执行加法运算,不能做连续运算
                a = Double.parseDouble(builder.substring(0, builder.indexOf("+")));
                b = Double.parseDouble(builder.substring(builder.indexOf("+") + 1));
                builder.delete(0, builder.length());
                textField.setText((a + b) + "");
            }else if((-1)!=builder.indexOf("-")) {
                a = Double.parseDouble(builder.substring(0, builder.indexOf("-")));
                b = Double.parseDouble(builder.substring(builder.indexOf("-") + 1));
                builder.delete(0, builder.length());
                textField.setText((a - b) + "");
            }else if((-1)!=builder.indexOf("*")) {
                a = Double.parseDouble(builder.substring(0, builder.indexOf("*")));
                b = Double.parseDouble(builder.substring(builder.indexOf("*") + 1));
                builder.delete(0, builder.length());
                textField.setText((a * b) + "");
            }else if((-1)!=builder.indexOf("/")) {
                a = Double.parseDouble(builder.substring(0, builder.indexOf("/")));
                b = Double.parseDouble(builder.substring(builder.indexOf("/") + 1));
                builder.delete(0, builder.length());
                textField.setText((a / b) + "");
            }
        }else if("+".equals(str)||"-".equals(str)||"*".equals(str)||"/".equals(str)){
            if (!Character.isDigit(string.charAt(string.length() - 1))) {//判断是不是最后一个字符是不是运算符号,是的话替换
                builder.delete(builder.length() - 1, builder.length());
            }
            builder.append(str);
            textField.setText(builder+"");
        }else if("c".equals(str)){
            builder.delete(0,builder.length());
            textField.setText(builder+"");
        }else if("b".equals(str)){
            builder.delete(builder.length()-1,builder.length());
            textField.setText(builder+"");
        }else if("sin".equals(str)){
            if(isNumeric(string)) {//调用函数isNumeric,判断是不是纯数字,是的话,进行sin运算。
                a = Double.parseDouble(builder+"");
                textField.setText(Math.sin(a / 180 * Math.PI) + "");
            }
            else
            {
                textField.setText("输入错误");
            }
        }else if("cos".equals(str)){
            if(isNumeric(string)) {
                a = Double.parseDouble(builder+"");
                textField.setText(Math.cos(a/180*Math.PI)+"");
            }
            else
            {
                textField.setText("输入错误");
            }
        }else if("X2".equals(str)){
            if (isNumeric(string)) {
                a = Double.parseDouble(builder + "");
                builder.delete(0, builder.length());
                textField.setText((a * a) + "");
            }
            else{
                textField.setText("输入错误");
            }
        }else if("sqrt".equals(str)){
            if (isNumeric(string)) {
                a = Double.parseDouble(builder + "");
                builder.delete(0, builder.length());
                textField.setText(Math.sqrt(a) + "");
            }
            else{
                textField.setText("输入错误");
            }
        }else{
            builder.append(str);
            textField.setText(builder+"");
        }
    }
    private boolean isNumeric(String str) {//isNumeric函数
        for (int i = str.length();--i>=0;){
            if (!Character.isDigit(str.charAt(i))){
                return false;
            }
        }
        return true;
    }
}

main文件

public class test {
    public static void main(String[] args) {
        calculator calculator = new calculator();//实例化计算器
        calculator.setVisible(true);//视图显示
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值