模拟实现一个可视化的简单计算器,至少提供包括加法、减法、乘法、除法等基本操作,希望能支持包括正负号、平方根、清零等其他功能
时间: 2023-10-20 13:01:48 浏览: 30
好的,这是一个简单的GUI程序,需要使用Java Swing库来实现。以下是一个实现的例子:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Calculator extends JFrame implements ActionListener {
private JTextField inputField;
private JLabel resultLabel;
private double num1, num2;
private String operator;
public Calculator() {
// 设置窗口属性
setTitle("计算器");
setSize(300, 300);
setLocationRelativeTo(null);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 添加组件
JPanel panel = new JPanel(new GridLayout(5, 4, 5, 5));
inputField = new JTextField();
panel.add(inputField);
JButton sqrtButton = new JButton("√");
sqrtButton.addActionListener(this);
panel.add(sqrtButton);
JButton clearButton = new JButton("C");
clearButton.addActionListener(this);
panel.add(clearButton);
JButton signButton = new JButton("+/-");
signButton.addActionListener(this);
panel.add(signButton);
JButton divideButton = new JButton("/");
divideButton.addActionListener(this);
panel.add(divideButton);
JButton num7Button = new JButton("7");
num7Button.addActionListener(this);
panel.add(num7Button);
JButton num8Button = new JButton("8");
num8Button.addActionListener(this);
panel.add(num8Button);
JButton num9Button = new JButton("9");
num9Button.addActionListener(this);
panel.add(num9Button);
JButton multiplyButton = new JButton("*");
multiplyButton.addActionListener(this);
panel.add(multiplyButton);
JButton num4Button = new JButton("4");
num4Button.addActionListener(this);
panel.add(num4Button);
JButton num5Button = new JButton("5");
num5Button.addActionListener(this);
panel.add(num5Button);
JButton num6Button = new JButton("6");
num6Button.addActionListener(this);
panel.add(num6Button);
JButton minusButton = new JButton("-");
minusButton.addActionListener(this);
panel.add(minusButton);
JButton num1Button = new JButton("1");
num1Button.addActionListener(this);
panel.add(num1Button);
JButton num2Button = new JButton("2");
num2Button.addActionListener(this);
panel.add(num2Button);
JButton num3Button = new JButton("3");
num3Button.addActionListener(this);
panel.add(num3Button);
JButton plusButton = new JButton("+");
plusButton.addActionListener(this);
panel.add(plusButton);
JButton num0Button = new JButton("0");
num0Button.addActionListener(this);
panel.add(num0Button);
JButton dotButton = new JButton(".");
dotButton.addActionListener(this);
panel.add(dotButton);
JButton equalsButton = new JButton("=");
equalsButton.addActionListener(this);
panel.add(equalsButton);
resultLabel = new JLabel();
panel.add(resultLabel);
add(panel);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
String action = e.getActionCommand();
switch (action) {
case "C":
clear();
break;
case "+/-":
changeSign();
break;
case "√":
sqrt();
break;
case "+":
case "-":
case "*":
case "/":
setOperator(action);
break;
case "=":
calculate();
break;
default:
appendNumber(action);
}
}
private void clear() {
inputField.setText("");
resultLabel.setText("");
num1 = 0;
num2 = 0;
operator = null;
}
private void changeSign() {
String input = inputField.getText();
if (input.startsWith("-")) {
inputField.setText(input.substring(1));
} else {
inputField.setText("-" + input);
}
}
private void sqrt() {
String input = inputField.getText();
double num = Double.parseDouble(input);
double result = Math.sqrt(num);
inputField.setText(String.valueOf(result));
}
private void setOperator(String op) {
String input = inputField.getText();
num1 = Double.parseDouble(input);
operator = op;
inputField.setText("");
}
private void appendNumber(String num) {
String input = inputField.getText();
inputField.setText(input + num);
}
private void calculate() {
String input = inputField.getText();
num2 = Double.parseDouble(input);
double result = 0;
switch (operator) {
case "+":
result = num1 + num2;
break;
case "-":
result = num1 - num2;
break;
case "*":
result = num1 * num2;
break;
case "/":
result = num1 / num2;
break;
}
resultLabel.setText(String.valueOf(result));
inputField.setText("");
}
public static void main(String[] args) {
new Calculator();
}
}
```
这个程序使用了JFrame和JPanel来创建窗口和组件,并使用了GridLayout来布局组件。使用JTextField和JLabel来实现文本框和标签。实现逻辑是在按钮点击事件中进行相应操作,并将结果显示在标签中。支持的操作包括清零、正负号、平方根、加法、减法、乘法、除法等基本操作。