📜  Java摇摆 |简单的计算器(1)

📅  最后修改于: 2023-12-03 15:02:04.834000             🧑  作者: Mango

Java摇摆 |简单的计算器

本文将介绍一个基于Java Swing编写的简单计算器。

代码片段
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Calculator extends JFrame implements ActionListener {
    private JPanel panel; // 面板
    private JTextField field; // 文本框
    private JButton[] buttons; // 按钮
    private String[] buttonNames = {"7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", "0", ".", "=", "+"};
    // 按钮名称

    public Calculator() { // 构造函数
        setTitle("Calculator");
        setSize(400, 300);
        setLocationRelativeTo(null); // 窗口居中
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        panel = new JPanel();
        panel.setLayout(new GridLayout(4, 4)); // 使用网格布局

        field = new JTextField();
        add(field, BorderLayout.NORTH); // 添加到窗口上方

        buttons = new JButton[buttonNames.length];
        for (int i = 0; i < buttons.length; i++) {
            buttons[i] = new JButton(buttonNames[i]);
            buttons[i].addActionListener(this); // 添加监听器
            panel.add(buttons[i]); // 添加到面板
        }
        add(panel, BorderLayout.CENTER); // 添加到窗口中心

        setVisible(true); // 显示窗口
    }

    public static void main(String[] args) {
        new Calculator();
    }

    @Override
    public void actionPerformed(ActionEvent e) { // 监听器
        String input = e.getActionCommand(); // 获取按钮文本
        switch (input) {
            case "=":
                String result;
                try {
                    result = String.valueOf(CalculatorUtils.calculate(field.getText())); // 计算结果
                } catch (Exception ex) {
                    result = "Error";
                }
                field.setText(result);
                break;
            case "C":
                field.setText("");
                break;
            default:
                field.setText(field.getText() + input);
        }
    }
}

class CalculatorUtils { // 计算工具类
    public static double calculate(String input) {
        String[] arr = input.split("(?<=[+\\-*/])|(?=[+\\-*/])"); // 拆分字符串
        double result = Double.parseDouble(arr[0]);
        String operator = "";
        for (int i = 1; i < arr.length; i++) {
            if (arr[i].matches("[+\\-*/]")) {
                operator = arr[i];
            } else {
                double num = Double.parseDouble(arr[i]);
                switch (operator) { // 执行计算
                    case "+":
                        result += num;
                        break;
                    case "-":
                        result -= num;
                        break;
                    case "*":
                        result *= num;
                        break;
                    case "/":
                        result /= num;
                        break;
                }
            }
        }
        return result;
    }
}
简介

该计算器基于Java Swing实现,支持基本的四则运算。

操作方法:

  • 点击数字和小数点按钮,将数字和小数点添加到文本框中;
  • 点击加减乘除按钮,将运算符添加到文本框中;
  • 点击“=”按钮,计算表达式并在文本框中显示结果;
  • 点击“C”按钮,清空文本框。
实现原理

首先,在构造函数中创建了一个JPanel面板,并使用网格布局管理器将按钮添加到面板中。

使用数组声明了按钮名称,通过循环创建JButton对象,并使用addActionListener()方法添加监听器。

在监听器中,通过getActionCommand()方法获取按钮文本,根据按钮文本执行不同的操作。

计算功能由CalculatorUtils类完成,该类包含一个静态方法calculate(),用于计算表达式的值。

在calculate()方法中,使用正则表达式拆分字符串,然后根据运算符执行相应的计算操作。

最后将计算结果返回。

总结

通过本例,你可以学习到如何使用Java Swing编写简单的GUI程序,并了解到如何使用正则表达式实现计算功能。

当然,本例只是一个简单的计算器,还有很多扩展和优化的空间。如果你感兴趣,可以尝试将该计算器扩展成更复杂的功能。