Java 图形界面计算器程序 - 支持多种运算
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();
}
}
运行后的界面:

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