用swing写一个简单的计算器,带代码解说
时间: 2024-05-02 21:16:20 浏览: 8
好的,下面是一个简单的计算器的Swing代码示例,其中包含了注释来解释每个部分的作用:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Calculator extends JFrame implements ActionListener {
// 定义计算器界面上的各个组件
private JTextField display;
private JButton button0, button1, button2, button3, button4,
button5, button6, button7, button8, button9;
private JButton buttonPlus, buttonMinus, buttonMultiply, buttonDivide, buttonEquals, buttonClear;
// 定义计算器内部的变量
private double num1, num2, result;
private String operator;
// 构造函数,用于初始化计算器界面
public Calculator() {
super("Calculator");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(200, 250);
// 设置计算器界面的布局
setLayout(new BorderLayout());
// 创建显示结果的文本框,并添加到计算器界面的顶部
display = new JTextField("0");
display.setEditable(false);
add(display, BorderLayout.NORTH);
// 创建数字按钮,并添加到计算器界面的中间区域
JPanel numberPanel = new JPanel(new GridLayout(4, 3));
button0 = new JButton("0");
button0.addActionListener(this);
numberPanel.add(button0);
button1 = new JButton("1");
button1.addActionListener(this);
numberPanel.add(button1);
button2 = new JButton("2");
button2.addActionListener(this);
numberPanel.add(button2);
button3 = new JButton("3");
button3.addActionListener(this);
numberPanel.add(button3);
button4 = new JButton("4");
button4.addActionListener(this);
numberPanel.add(button4);
button5 = new JButton("5");
button5.addActionListener(this);
numberPanel.add(button5);
button6 = new JButton("6");
button6.addActionListener(this);
numberPanel.add(button6);
button7 = new JButton("7");
button7.addActionListener(this);
numberPanel.add(button7);
button8 = new JButton("8");
button8.addActionListener(this);
numberPanel.add(button8);
button9 = new JButton("9");
button9.addActionListener(this);
numberPanel.add(button9);
add(numberPanel, BorderLayout.CENTER);
// 创建操作符按钮,并添加到计算器界面的右侧区域
JPanel operatorPanel = new JPanel(new GridLayout(5, 1));
buttonPlus = new JButton("+");
buttonPlus.addActionListener(this);
operatorPanel.add(buttonPlus);
buttonMinus = new JButton("-");
buttonMinus.addActionListener(this);
operatorPanel.add(buttonMinus);
buttonMultiply = new JButton("*");
buttonMultiply.addActionListener(this);
operatorPanel.add(buttonMultiply);
buttonDivide = new JButton("/");
buttonDivide.addActionListener(this);
operatorPanel.add(buttonDivide);
buttonEquals = new JButton("=");
buttonEquals.addActionListener(this);
operatorPanel.add(buttonEquals);
add(operatorPanel, BorderLayout.EAST);
// 创建清零按钮,并添加到计算器界面的底部
JPanel clearPanel = new JPanel();
buttonClear = new JButton("Clear");
buttonClear.addActionListener(this);
clearPanel.add(buttonClear);
add(clearPanel, BorderLayout.SOUTH);
// 初始化计算器内部的变量
num1 = 0;
num2 = 0;
result = 0;
operator = "";
// 显示计算器界面
setVisible(true);
}
// 处理各个按钮的点击事件
public void actionPerformed(ActionEvent event) {
// 获取被点击的按钮的标签
String label = event.getActionCommand();
// 根据标签执行不同的操作
if (label.equals("0")) {
appendDigit(0);
} else if (label.equals("1")) {
appendDigit(1);
} else if (label.equals("2")) {
appendDigit(2);
} else if (label.equals("3")) {
appendDigit(3);
} else if (label.equals("4")) {
appendDigit(4);
} else if (label.equals("5")) {
appendDigit(5);
} else if (label.equals("6")) {
appendDigit(6);
} else if (label.equals("7")) {
appendDigit(7);
} else if (label.equals("8")) {
appendDigit(8);
} else if (label.equals("9")) {
appendDigit(9);
} else if (label.equals("+")) {
setOperator("+");
} else if (label.equals("-")) {
setOperator("-");
} else if (label.equals("*")) {
setOperator("*");
} else if (label.equals("/")) {
setOperator("/");
} else if (label.equals("=")) {
calculateResult();
} else if (label.equals("Clear")) {
clear();
}
}
// 追加一个数字到当前的操作数
private void appendDigit(int digit) {
if (operator.equals("")) {
num1 = num1 * 10 + digit;
display.setText(Double.toString(num1));
} else {
num2 = num2 * 10 + digit;
display.setText(Double.toString(num2));
}
}
// 设置当前的操作符
private void setOperator(String op) {
operator = op;
}
// 计算结果并显示
private void calculateResult() {
if (operator.equals("+")) {
result = num1 + num2;
} else if (operator.equals("-")) {
result = num1 - num2;
} else if (operator.equals("*")) {
result = num1 * num2;
} else if (operator.equals("/")) {
result = num1 / num2;
}
display.setText(Double.toString(result));
}
// 清空计算器
private void clear() {
num1 = 0;
num2 = 0;
result = 0;
operator = "";
display.setText("0");
}
public static void main(String[] args) {
new Calculator();
}
}
```
在这个示例中,我们首先定义了计算器界面上的各个组件,包括数字按钮、操作符按钮、显示结果的文本框和清空按钮。然后在构造函数中初始化这些组件,并设置计算器界面的布局。我们使用了BorderLayout布局来将计算器界面分为顶部、中间、右侧和底部四个区域,并将各个组件添加到对应的区域中。
我们还定义了一些内部变量来保存计算器内部的状态,包括当前的操作数、操作符和计算结果。我们在点击各个按钮时,根据按钮的标签执行不同的操作,例如追加数字、设置操作符、计算结果和清空计算器等。我们还实现了一些辅助方法来简化代码,例如appendDigit方法用于将数字追加到当前的操作数中,setOperator方法用于设置当前的操作符,calculateResult方法用于计算结果并显示,以及clear方法用于清空计算器。
最后,在main方法中创建一个新的Calculator对象来启动计算器界面。