计算器的模拟实现

简介: 计算器的模拟实现

一、实验题目:计算器

二:实验目的:

通过本次实验使学生掌握java语言图形用户界面开发的相关技术。

三:实验内容与实现

1:【实验内容】

完成计算器的加、减、乘、除、开方、求反等功能,具体功能需求可以参考window自带计算器。如图:

2:【实验实现】

1.计算器界面的实现,如下图所示:



2:各项功能的实现,如下图所示:



3:具体的实现代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Calculator extends JFrame implements ActionListener {
    //声明并初始化各组件
    private JTextField displayField;
    private JButton addButton, subtractButton, multiplyButton, divideButton,
            sqrtButton, negateButton, equalsButton;
    private double currentValue = 0.0;
    private String currentOperation = "=";
    public Calculator() {
        //设置窗口标题和关闭操作
        setTitle("Calculator");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //设置窗口的大小
       setSize(300, 300);
        //创建并设置显示框
        displayField = new JTextField("0");
        displayField.setEditable(false);
        displayField.setHorizontalAlignment(JTextField.RIGHT);
        add(displayField, BorderLayout.NORTH);
       //设置按钮面板
        JPanel buttonPanel = new JPanel();
        buttonPanel.setLayout(new GridLayout(5, 4));
       //初始化并添加加法按钮
        addButton = new JButton("+");
        addButton.addActionListener(this);
        buttonPanel.add(addButton);
        //初始化并添加减法按钮
        subtractButton = new JButton("-");
        subtractButton.addActionListener(this);
        buttonPanel.add(subtractButton);
        //初始化并添加乘法按钮
        multiplyButton = new JButton("*");
        multiplyButton.addActionListener(this);
        buttonPanel.add(multiplyButton);
        //初始化并添加除法按钮
        divideButton = new JButton("/");
        divideButton.addActionListener(this);
        buttonPanel.add(divideButton);
        //初始化并添加平方根按钮
        sqrtButton = new JButton("sqrt");
        sqrtButton.addActionListener(this);
        buttonPanel.add(sqrtButton);
        //初始化并添加正负号按钮
        negateButton = new JButton("+/-");
        negateButton.addActionListener(this);
        buttonPanel.add(negateButton);
        //初始化并添加等于号按钮
        equalsButton = new JButton("=");
        equalsButton.addActionListener(this);
        equalsButton.setForeground(Color.RED);
        buttonPanel.add(equalsButton);
        //初始化并添加数字按钮(0——9)
        for (int i = 1; i < 10; i++) {
            JButton digitButton = new JButton(String.valueOf(i));
            digitButton.addActionListener(this);
            buttonPanel.add(digitButton);
        }
       //将面板添加到窗口
        add(buttonPanel, BorderLayout.CENTER);
    }
    public void actionPerformed(ActionEvent e) {
        String buttonText = e.getActionCommand();
        if (buttonText.equals("C")) {//处理清空按钮,删除当前值
            currentValue = 0.0;
            currentOperation = "=";
            displayField.setText("0");
        } else if (buttonText.equals("+")) {//处理加法按钮,保存当前值和操作符,并将显示框文本重置为0
            currentValue = Double.parseDouble(displayField.getText());
            currentOperation = "+";
            displayField.setText("0");
        } else if (buttonText.equals("-")) {//处理减法按钮,保存当前值和操作符,并将显示框文本重置为0
            currentValue = Double.parseDouble(displayField.getText());
            currentOperation = "-";
            displayField.setText("0");
        } else if (buttonText.equals("*")) {//处理乘法按钮,保存当前值和操作符,并将显示框文本重置为0
            currentValue = Double.parseDouble(displayField.getText());
            currentOperation = "*";
            displayField.setText("0");        }
        else if (buttonText.equals("/")) {//处理除法按钮,保存当前值和操作符,并将显示框文本重置为0
            currentValue = Double.parseDouble(displayField.getText());
            currentOperation = "/";
            displayField.setText("0");
        } else if (buttonText.equals("sqrt")) {//处理平方根按钮,保存当前值和操作符,并将显示框文本重置为0
            currentValue = Double.parseDouble(displayField.getText());
            currentValue = Math.sqrt(currentValue);
            displayField.setText(String.valueOf(currentValue));
        } else if (buttonText.equals("+/-")) {//处理正负号事件,
            currentValue = Double.parseDouble(displayField.getText());
            currentValue = -currentValue;
            displayField.setText(String.valueOf(currentValue));
        } else if (buttonText.equals("=")) {//处理等号按钮,执行计算操作并更新显示框文本
            double newValue = Double.parseDouble(displayField.getText());
            if (currentOperation.equals("+")) {
                currentValue += newValue;
            } else if (currentOperation.equals("-")) {
                currentValue -= newValue;
            } else if (currentOperation.equals("*")) {
                currentValue *= newValue;
            } else if (currentOperation.equals("/")) {
                currentValue /= newValue;
            }
            //更新显示框文本
            displayField.setText(String.valueOf(currentValue));
            currentOperation = "=";
        } else {
            if (displayField.getText().equals("0")) {
                displayField.setText(buttonText);
            } else {//添加新的数字到显示框
                displayField.setText(displayField.getText() + buttonText);
            }
        }
    }
    public static void main(String[] args) {
        Calculator calculator = new Calculator();
        calculator.setVisible(true);
    }
}
目录
相关文章
|
设计模式 前端开发 JavaScript
【JavaScript 技术专栏】JavaScript 设计模式与实战应用
【4月更文挑战第30天】本文探讨JavaScript设计模式在提升开发效率和代码质量中的关键作用。涵盖单例、工厂、观察者、装饰器和策略模式,并通过实例阐述其在全局状态管理、复杂对象创建、实时数据更新、功能扩展和算法切换的应用。理解并运用这些模式能帮助开发者应对复杂项目,提升前端开发能力。
173 0
|
Web App开发 JavaScript 前端开发
使用vue快速开发一个带弹窗的Chrome插件
使用vue快速开发一个带弹窗的Chrome插件
520 0
使用vue快速开发一个带弹窗的Chrome插件
|
11月前
|
自然语言处理 编译器 Linux
告别头文件,编译效率提升 42%!C++ Modules 实战解析 | 干货推荐
本文中,阿里云智能集团开发工程师李泽政以 Alinux 为操作环境,讲解模块相比传统头文件有哪些优势,并通过若干个例子,学习如何组织一个 C++ 模块工程并使用模块封装第三方库或是改造现有的项目。
763 56
|
11月前
RS-485网络中的标准端接与交流电端接应用解析
RS-485,作为一种广泛应用的差分信号传输标准,因其传输距离远、抗干扰能力强、支持多点通讯等优点,在工业自动化、智能建筑、交通运输等领域得到了广泛应用。在构建RS-485网络时,端接技术扮演着至关重要的角色,它直接影响到网络的信号完整性、稳定性和通信质量。
|
12月前
|
资源调度 前端开发 测试技术
React Router 路由管理
【10月更文挑战第10天】本文介绍了 React Router,一个在 React 应用中管理路由的强大工具。内容涵盖基本概念、安装与使用方法、常见问题及解决方案,如路由嵌套、动态路由和路由守卫等,并提供代码示例。通过学习本文,开发者可以更高效地使用 React Router,提升应用的导航体验和安全性。
764 19
|
12月前
|
数据可视化 搜索推荐
GUI图形用户界面
【10月更文挑战第8天】
|
SQL 存储 大数据
Paimon 在汽车之家的业务实践
本文分享自汽车之家的王刚、范文、李乾⽼师。介绍了汽车之家基于 Paimon 的一些实践,和一些背景。
794 7
Paimon 在汽车之家的业务实践
|
存储 SQL Oracle
关系型数据库Oracle归档日志备份
【7月更文挑战第19天】
276 5
|
JavaScript 前端开发 安全
【JavaScript 】DOM操作快速入门
【JavaScript 】DOM操作快速入门
349 2
|
人工智能 自然语言处理 搜索推荐