由于问题中没有具体要求GUI界面的样式和布局,因此这里提供一个简单的界面,代码中使用了Java Swing组件。

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](https://user-images.githubusercontent.com/6560680/120749356-2b22c900-c53b-11eb-94c7-0d1afb7b4f1c.png

利用Java代码进行编程计算器程序功能要求:该程序显示GUI用户界面能实现整数的加、减、乘、除、乘方、立方、n次放、开平方、开n次方、倒数、三角函数、反三角函数运算。界面要示:用图形界面实现。

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

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