Java 图形界面计算器程序 - 支持多种运算

本程序使用 Java Swing 构建图形界面,实现整数的加、减、乘、除、乘方、立方、n次方、开平方、开n次方、倒数、三角函数、反三角函数等多种运算。

功能要求:

  • 该程序显示 GUI 用户界面。
  • 能实现整数的加、减、乘、除、乘方、立方、n次方、开平方、开n次方、倒数、三角函数、反三角函数运算。

界面要求:

  • 用图形界面实现。

代码:

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

public class Calculator extends JFrame implements ActionListener {
    private JTextField textField;
    private JButton buttonAdd, buttonSub, buttonMul, buttonDiv, buttonPow, buttonCube, buttonNth, buttonSqrt, buttonNthRoot, buttonReciprocal;
    private JButton buttonSin, buttonCos, buttonTan, buttonArcSin, buttonArcCos, buttonArcTan, buttonEqual;
    private JPanel panel;

    private double num1, num2, result;
    private String operator = "";

    public Calculator() {
        setTitle('Calculator');
        setSize(400, 400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        textField = new JTextField();
        textField.setEditable(false);
        textField.setPreferredSize(new Dimension(350, 50));

        buttonAdd = new JButton('+');
        buttonSub = new JButton('-');
        buttonMul = new JButton('*');
        buttonDiv = new JButton('/');
        buttonPow = new JButton('x^y');
        buttonCube = new JButton('x^3');
        buttonNth = new JButton('x^n');
        buttonSqrt = new JButton('√');
        buttonNthRoot = new JButton('√n');
        buttonReciprocal = new JButton('1/x');

        buttonSin = new JButton('sin');
        buttonCos = new JButton('cos');
        buttonTan = new JButton('tan');
        buttonArcSin = new JButton('arcsin');
        buttonArcCos = new JButton('arccos');
        buttonArcTan = new JButton('arctan');

        buttonEqual = new JButton('=');

        panel = new JPanel(new GridLayout(5, 4));
        panel.add(buttonSin);
        panel.add(buttonCos);
        panel.add(buttonTan);
        panel.add(buttonArcSin);
        panel.add(buttonArcCos);
        panel.add(buttonArcTan);
        panel.add(buttonPow);
        panel.add(buttonCube);
        panel.add(buttonNth);
        panel.add(buttonSqrt);
        panel.add(buttonNthRoot);
        panel.add(buttonReciprocal);
        panel.add(buttonAdd);
        panel.add(buttonSub);
        panel.add(buttonMul);
        panel.add(buttonDiv);
        panel.add(textField);
        panel.add(buttonEqual);

        buttonAdd.addActionListener(this);
        buttonSub.addActionListener(this);
        buttonMul.addActionListener(this);
        buttonDiv.addActionListener(this);
        buttonPow.addActionListener(this);
        buttonCube.addActionListener(this);
        buttonNth.addActionListener(this);
        buttonSqrt.addActionListener(this);
        buttonNthRoot.addActionListener(this);
        buttonReciprocal.addActionListener(this);

        buttonSin.addActionListener(this);
        buttonCos.addActionListener(this);
        buttonTan.addActionListener(this);
        buttonArcSin.addActionListener(this);
        buttonArcCos.addActionListener(this);
        buttonArcTan.addActionListener(this);

        buttonEqual.addActionListener(this);

        add(panel);

        setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == buttonAdd) {
            num1 = Double.parseDouble(textField.getText());
            operator = '+';
            textField.setText("");
        } else if (e.getSource() == buttonSub) {
            num1 = Double.parseDouble(textField.getText());
            operator = '-';
            textField.setText("");
        } else if (e.getSource() == buttonMul) {
            num1 = Double.parseDouble(textField.getText());
            operator = '*';
            textField.setText("");
        } else if (e.getSource() == buttonDiv) {
            num1 = Double.parseDouble(textField.getText());
            operator = '/';
            textField.setText("");
        } else if (e.getSource() == buttonPow) {
            num1 = Double.parseDouble(textField.getText());
            operator = 'pow';
            textField.setText("");
        } else if (e.getSource() == buttonCube) {
            num1 = Double.parseDouble(textField.getText());
            operator = 'cube';
            textField.setText("");
        } else if (e.getSource() == buttonNth) {
            num1 = Double.parseDouble(textField.getText());
            operator = 'nth';
            textField.setText("");
        } else if (e.getSource() == buttonSqrt) {
            num1 = Double.parseDouble(textField.getText());
            operator = 'sqrt';
            calculate();
        } else if (e.getSource() == buttonNthRoot) {
            num1 = Double.parseDouble(textField.getText());
            operator = 'nthRoot';
            textField.setText("");
        } else if (e.getSource() == buttonReciprocal) {
            num1 = Double.parseDouble(textField.getText());
            operator = 'reciprocal';
            calculate();
        } else if (e.getSource() == buttonSin) {
            num1 = Double.parseDouble(textField.getText());
            operator = 'sin';
            calculate();
        } else if (e.getSource() == buttonCos) {
            num1 = Double.parseDouble(textField.getText());
            operator = 'cos';
            calculate();
        } else if (e.getSource() == buttonTan) {
            num1 = Double.parseDouble(textField.getText());
            operator = 'tan';
            calculate();
        } else if (e.getSource() == buttonArcSin) {
            num1 = Double.parseDouble(textField.getText());
            operator = 'arcsin';
            calculate();
        } else if (e.getSource() == buttonArcCos) {
            num1 = Double.parseDouble(textField.getText());
            operator = 'arccos';
            calculate();
        } else if (e.getSource() == buttonArcTan) {
            num1 = Double.parseDouble(textField.getText());
            operator = 'arctan';
            calculate();
        } else if (e.getSource() == buttonEqual) {
            num2 = Double.parseDouble(textField.getText());
            calculate();
            num1 = 0;
            num2 = 0;
            operator = "";
        }
    }

    private void calculate() {
        switch (operator) {
            case '+':
                result = num1 + num2;
                break;
            case '-':
                result = num1 - num2;
                break;
            case '*':
                result = num1 * num2;
                break;
            case '/':
                result = num1 / num2;
                break;
            case 'pow':
                result = Math.pow(num1, num2);
                break;
            case 'cube':
                result = Math.pow(num1, 3);
                break;
            case 'nth':
                result = Math.pow(num1, num2);
                break;
            case 'sqrt':
                result = Math.sqrt(num1);
                break;
            case 'nthRoot':
                result = Math.exp(Math.log(num1) / num2);
                break;
            case 'reciprocal':
                result = 1 / num1;
                break;
            case 'sin':
                result = Math.sin(num1);
                break;
            case 'cos':
                result = Math.cos(num1);
                break;
            case 'tan':
                result = Math.tan(num1);
                break;
            case 'arcsin':
                result = Math.asin(num1);
                break;
            case 'arccos':
                result = Math.acos(num1);
                break;
            case 'arctan':
                result = Math.atan(num1);
                break;
            default:
                result = num1;
                break;
        }
        textField.setText(Double.toString(result));
    }

    public static void main(String[] args) {
        new Calculator();
    }
}

运行后的界面:

calculator_gui

Java 图形界面计算器程序 - 支持多种运算

原文地址: https://www.cveoy.top/t/topic/oR12 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录