效果图如下所示 :

import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
@SuppressWarnings("serial")
public class Calculator extends JFrame {
private Container container = this.getContentPane();
private GridBagLayout gridBagLayout = new GridBagLayout();
// 用 GridBagConstraints 类来维持一个动态的矩形单位网格
private GridBagConstraints gridBagConstraints = new GridBagConstraints();
private JTextField displayField;
private String lastCommand = "=";
private double result = 0.0d;
private boolean start = true;
public Calculator() {
super("计算器");
container.setLayout(gridBagLayout);
initDisplayArea();
initButtons();
initFrame();
}
private void initFrame() {
setSize(500, 800); // 设置计算器窗口的大小
setLocation(650, 60); // 设置窗口的位置
setVisible(true);
setResizable(false);
setForeground(Color.WHITE);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
// 设置数字符号按钮
private void initButtons() {
ActionListener insert = new Calculator.InsertAction();
ActionListener command = new Calculator.CommandAction();
addButton("返回", 0, 1, 2, 1, insert);
addButton("清零", 2, 1, 2, 1, insert);
addButton("7", 0, 2, 1, 1, insert);
addButton("8", 1, 2, 1, 1, insert);
addButton("9", 2, 2, 1, 1, insert);
addButton("+", 3, 2, 1, 1, command);
addButton("4", 0, 3, 1, 1, insert);
addButton("5", 1, 3, 1, 1, insert);
addButton("6", 2, 3, 1, 1, insert);
addButton("-", 3, 3, 1, 1, command);
addButton("1", 0, 4, 1, 1, insert);
addButton("2", 1, 4, 1, 1, insert);
addButton("3", 2, 4, 1, 1, insert);
addButton("*", 3, 4, 1, 1, command);
addButton("0", 0, 5, 1, 1, insert);
addButton("-", 1, 5, 1, 1, insert);
addButton(".", 2, 5, 1, 1, insert);
addButton("/", 3, 5, 1, 1, command);
addButton("=", 0, 6, 4, 1, command);
}
// 设置显示框
private void initDisplayArea() {
displayField = new JTextField(20);
displayField.setHorizontalAlignment(4);
displayField.setBackground(Color.WHITE); // 设置显示框的颜色
displayField.setDisabledTextColor(Color.BLACK); // 设置输入数字的颜色
displayField.setEnabled(false);
displayField.setFont(new Font("宋体", Font.BOLD, 50));
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 4;
gridBagConstraints.gridheight = 1;
gridBagConstraints.fill = 1;
gridBagConstraints.weightx = 1;
gridBagConstraints.weighty = 1;
gridBagLayout.setConstraints(displayField, gridBagConstraints);
container.add(displayField);
}
private void addButton(String label, int column, int row, int with, int height, ActionListener listener) {
JButton button = new JButton(label);
button.setForeground(Color.BLACK); // 设置数字的颜色
button.setFont(new Font("楷体", Font.BOLD, 35)); // 调整数字的大小
button.addActionListener(listener);
gridBagConstraints.gridx = column;
gridBagConstraints.gridy = row;
gridBagConstraints.gridwidth = with;
gridBagConstraints.gridheight = height;
gridBagConstraints.fill = GridBagConstraints.BOTH;
gridBagConstraints.insets = new Insets(1, 1, 1, 1);
gridBagLayout.setConstraints(button, gridBagConstraints);
container.add(button);
}
public void calculate(double x) {
if (this.lastCommand.equals("+")) {
this.result += x;
} else if (this.lastCommand.equals("-")) {
this.result -= x;
} else if (this.lastCommand.equals("*")) {
this.result *= x;
} else if (this.lastCommand.equals("/")) {
this.result /= x;
} else if (this.lastCommand.equals("=")) {
this.result = x;
}
this.displayField.setText("" + this.result);
}
public static void main(String[] args) {
new Calculator();
}
private class CommandAction implements ActionListener {
private CommandAction() {
}
public void actionPerformed(ActionEvent evt) {
String command = evt.getActionCommand();
if (Calculator.this.start) {
Calculator.this.lastCommand = command;
} else {
Calculator.this.calculate(Double.parseDouble(Calculator.this.displayField.getText()));
Calculator.this.lastCommand = command;
Calculator.this.start = true;
}
}
}
private class InsertAction implements ActionListener {
private InsertAction() {
}
public void actionPerformed(ActionEvent event) {
String input = event.getActionCommand();
if (Calculator.this.start) {
Calculator.this.displayField.setText("");
Calculator.this.start = false;
if (input.equals("-")) {
Calculator.this.displayField.setText(Calculator.this.displayField.getText() + "-");
}
}
if (!input.equals("-")) {
if (input.equals("返回")) {
String str = Calculator.this.displayField.getText();
if (str.length() > 0) {
Calculator.this.displayField.setText(str.substring(0, str.length() - 1));
}
} else if (input.equals("清零")) {
Calculator.this.displayField.setText("0");
result = 0.0d;
Calculator.this.start = true;
} else {
if (input.equals(".")) {
if (Calculator.this.displayField.getText().trim().indexOf(".") == -1) {
Calculator.this.displayField.setText(Calculator.this.displayField.getText() + input);
}
} else {
Calculator.this.displayField.setText(Calculator.this.displayField.getText() + input);
}
}
}
}
}
}
posted on
浙公网安备 33010602011771号