You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
3.9 KiB
128 lines
3.9 KiB
package xzk;
|
|
|
|
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 num1Field, num2Field, resultField;
|
|
private JComboBox<String> operatorBox;
|
|
|
|
public Calculator() {
|
|
|
|
super("简单计算器");
|
|
|
|
|
|
setLayout(new BorderLayout());
|
|
|
|
// 创建面板
|
|
JPanel inputPanel = new JPanel(new GridBagLayout());
|
|
GridBagConstraints gbc = new GridBagConstraints();
|
|
gbc.insets = new Insets(5, 5, 5, 5); // 设置组件之间的间距
|
|
|
|
// 创建输入字段和标签
|
|
gbc.gridx = 0;
|
|
gbc.gridy = 0;
|
|
inputPanel.add(new JLabel("第一个数字:"), gbc);
|
|
gbc.gridx = 1;
|
|
num1Field = new JTextField(10);
|
|
inputPanel.add(num1Field, gbc);
|
|
|
|
gbc.gridy = 1;
|
|
gbc.gridx = 0;
|
|
inputPanel.add(new JLabel("第二个数字:"), gbc);
|
|
gbc.gridx = 1;
|
|
num2Field = new JTextField(10);
|
|
inputPanel.add(num2Field, gbc);
|
|
|
|
gbc.gridy = 2;
|
|
gbc.gridx = 0;
|
|
inputPanel.add(new JLabel("操作符:"), gbc);
|
|
gbc.gridx = 1;
|
|
operatorBox = new JComboBox<>(new String[]{"+", "-", "*", "/", "%"});
|
|
inputPanel.add(operatorBox, gbc);
|
|
|
|
gbc.gridy = 3;
|
|
gbc.gridx = 0;
|
|
inputPanel.add(new JLabel("结果:"), gbc);
|
|
gbc.gridx = 1;
|
|
resultField = new JTextField(10);
|
|
resultField.setEditable(false);
|
|
inputPanel.add(resultField, gbc);
|
|
|
|
// 创建计算按钮
|
|
JButton calculateButton = new JButton("计算");
|
|
gbc.gridy = 4;
|
|
gbc.gridx = 0;
|
|
gbc.gridwidth = 2;
|
|
gbc.fill = GridBagConstraints.HORIZONTAL;
|
|
inputPanel.add(calculateButton, gbc);
|
|
|
|
// 添加事件监听器
|
|
calculateButton.addActionListener(this);
|
|
|
|
// 设置面板背景色
|
|
inputPanel.setBackground(Color.LIGHT_GRAY);
|
|
|
|
// 将面板添加到窗口
|
|
add(inputPanel, BorderLayout.CENTER);
|
|
|
|
// 设置窗口属性
|
|
setSize(400, 300);
|
|
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
|
setLocationRelativeTo(null); // 窗口居中显示
|
|
setVisible(true);
|
|
}
|
|
|
|
@Override
|
|
public void actionPerformed(ActionEvent e) {
|
|
try {
|
|
double num1 = Double.parseDouble(num1Field.getText());
|
|
double num2 = Double.parseDouble(num2Field.getText());
|
|
String operator = (String) operatorBox.getSelectedItem();
|
|
double result;
|
|
|
|
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 {
|
|
JOptionPane.showMessageDialog(this, "错误:除数不能为零");
|
|
return;
|
|
}
|
|
break;
|
|
case "%":
|
|
if (num2 != 0) {
|
|
result = num1 % num2;
|
|
} else {
|
|
JOptionPane.showMessageDialog(this, "错误:除数不能为零");
|
|
return;
|
|
}
|
|
break;
|
|
default:
|
|
JOptionPane.showMessageDialog(this, "无效的操作符!");
|
|
return;
|
|
}
|
|
|
|
resultField.setText(String.format("%.2f", result));
|
|
} catch (NumberFormatException ex) {
|
|
JOptionPane.showMessageDialog(this, "请输入有效的数字");
|
|
}
|
|
}
|
|
|
|
public static void main(String[] args) {
|
|
new Calculator();
|
|
}
|
|
}
|