效果图如下所示 :


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 2022-04-11 16:32  zhang-xinbin  阅读(96)  评论(0)    收藏  举报