- 定义Java类,该类名为SimpleCalculator,用于创建图形用户界面(GUI)中的窗口。
public class SimpleCalculator extends JFrame {
private JTextField display;
private String currentInput = "";
private String previousInput = "";
private String operator = "";
private boolean hasOperator = false;
(2)构造SimpleCalculator类的函数,负责初始化窗口的基本设置和界面组件。
public SimpleCalculator() {
setTitle("Simple Calculator");//设置窗口名称
setSize(600, 800);//设置窗口大小
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
display = new JTextField();
display.setHorizontalAlignment(JTextField.RIGHT); //设置水平对齐方式为右对齐,数字将从字段的右侧开始显示
display.setEditable(false);
add(display, BorderLayout.NORTH);
JPanel panel = new JPanel(); //创建面板
panel.setLayout(new GridLayout(5, 4));
(3)计算器按钮及加减乘除运算
// 数字按钮
for (int i = 0; i < 10; i++) {
JButton button = new JButton(String.valueOf(i));
button.addActionListener(new NumberButtonListener(i));
panel.add(button);
}
// 运算符按钮
String[] operators = {"+", "-", "*", "/"};
for (String op : operators) {
JButton button = new JButton(op);
button.addActionListener(new OperatorButtonListener(op));
panel.add(button);
}
// 特殊按钮
JButton clearButton = new JButton("C");
clearButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
clearDisplay();
}
});
panel.add(clearButton);
JButton equalsButton = new JButton("=");
equalsButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
calculateResult();
}
});
panel.add(equalsButton);
add(panel, BorderLayout.CENTER);
}
private void clearDisplay() {
currentInput = "";
previousInput = "";
operator = "";
hasOperator = false;
display.setText("0");
}
private void calculateResult() {
if (!currentInput.isEmpty() && !previousInput.isEmpty() && !operator.isEmpty()) {
double num1 = Double.parseDouble(previousInput);
double num2 = Double.parseDouble(currentInput);
double result = 0;
switch (operator) {
case "+":
result = num1 + num2;
break;
case "-":
result = num1 - num2;
break;
case "*":
result = num1 * num2;
break;
case "/":
if (num2 != 0) {
result = num1 / num2;
} else {
display.setText("Error: Division by zero");
return;
}
break;
default:
display.setText("Error: Invalid operator");
return;
}
display.setText(String.valueOf(result));
currentInput = String.valueOf(result);
previousInput = "";
operator = "";
hasOperator = false;
} else {
display.setText("Error: Invalid input");
}
}
(4)设置监听器,定义了一个内部类NumberButtonListener,实现了ActionListener接口。
private class NumberButtonListener implements ActionListener {
private int number;
public NumberButtonListener(int number) {
this.number = number;
}
@Override
public void actionPerformed(ActionEvent e) {
if (currentInput.equals("0")) {
currentInput = String.valueOf(number);
} else {
currentInput += number;
}
display.setText(currentInput);
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class SimpleCalculator extends JFrame {
private JTextField display;
private String currentInput = "";
private String previousInput = "";
private String operator = "";
private boolean hasOperator = false;
public SimpleCalculator() {
setTitle("Simple Calculator");
setSize(600, 800);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
display = new JTextField();
display.setHorizontalAlignment(JTextField.RIGHT);
display.setEditable(false);
add(display, BorderLayout.NORTH);
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(5, 4));
// 数字按钮
for (int i = 0; i < 10; i++) {
JButton button = new JButton(String.valueOf(i));
button.addActionListener(new NumberButtonListener(i));
panel.add(button);
}
// 运算符按钮
String[] operators = {"+", "-", "*", "/"};
for (String op : operators) {
JButton button = new JButton(op);
button.addActionListener(new OperatorButtonListener(op));
panel.add(button);
}
// 特殊按钮
JButton clearButton = new JButton("C");
clearButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
clearDisplay();
}
});
panel.add(clearButton);
JButton equalsButton = new JButton("=");
equalsButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
calculateResult();
}
});
panel.add(equalsButton);
add(panel, BorderLayout.CENTER);
}
private void clearDisplay() {
currentInput = "";
previousInput = "";
operator = "";
hasOperator = false;
display.setText("0");
}
private void calculateResult() {
if (!currentInput.isEmpty() && !previousInput.isEmpty() && !operator.isEmpty()) {
double num1 = Double.parseDouble(previousInput);
double num2 = Double.parseDouble(currentInput);
double result = 0;
switch (operator) {
case "+":
result = num1 + num2;
break;
case "-":
result = num1 - num2;
break;
case "*":
result = num1 * num2;
break;
case "/":
if (num2 != 0) {
result = num1 / num2;
} else {
display.setText("Error: Division by zero");
return;
}
break;
default:
display.setText("Error: Invalid operator");
return;
}
display.setText(String.valueOf(result));
currentInput = String.valueOf(result);
previousInput = "";
operator = "";
hasOperator = false;
} else {
display.setText("Error: Invalid input");
}
}
private class NumberButtonListener implements ActionListener {
private int number;
public NumberButtonListener(int number) {
this.number = number;
}
@Override
public void actionPerformed(ActionEvent e) {
if (currentInput.equals("0")) {
currentInput = String.valueOf(number);
} else {
currentInput += number;
}
display.setText(currentInput);
}
}
private class OperatorButtonListener implements ActionListener {
private String op;
public OperatorButtonListener(String op) {
this.op = op;
}
@Override
public void actionPerformed(ActionEvent e) {
if (!currentInput.isEmpty()) {
previousInput = currentInput;
operator = op;
hasOperator = true;
currentInput = "";
}
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
SimpleCalculator frame = new SimpleCalculator();
frame.setVisible(true);
}
});
}
}