一个Java的简易计算器
一、人员分工
任务 | 姓名 |
计算、粘贴功能 | 陈炜棋 |
界面放置、按键监控 | 林炳坚 |
二、系统功能架构图
三、系统描述
仿照Windows计算器,编写一具有GUI的计算器,能实现整数的加、减、乘、除四则运算,并且需要支持键盘快捷键,基本可取代windows计算器。支持复制、粘贴功能,方便输入长串数字。
四、功能说明
1.界面放置
代码中包括了创建清除按钮、数字和运算符按钮数组,并设置它们的位置、大小和样式。同时,还设置了计算式文本框和计算结果文本框的位置、大小和样式。清除按钮的功能是清空计算式和结果文本框的内容。数字和运算符按钮数组通过循环放置到窗口中,并设置了它们的位置、大小和样式。整个窗口的布局采用了自定义布局,即使用绝对位置和大小来布局组件。
2.按键监控
实现了为按钮添加动作监听器以及键盘事件监听器,从而实现了按钮点击和键盘输入的功能。
-
为每个按钮添加监听器:通过遍历按钮数组,为每个按钮添加动作监听器,以便在按钮被点击时执行相应的操作。
-
设置窗口相关属性:设置窗口大小、位置,窗口关闭操作为直接关闭,使窗口可见,并设置窗口获得焦点。
-
为粘贴按钮添加监听器:为“粘贴”按钮添加监听器,当按钮被点击时,从系统剪贴板获取内容,并将内容设置到计算式文本框中。
-
添加键盘事件监听器:通过添加键盘事件监听器,捕获键盘输入。在键盘输入时,根据输入的字符进行相应的处理,包括数字、小数点、运算符和等号的处理。具体功能包括:
- 追加数字或小数点到键盘输入缓冲区,并更新计算式文本框内容。
- 处理运算符或等号的输入,根据当前的操作数和运算符状态更新计算式文本框,并调用result函数计算结果。
3.运算功能
主要包括以下功能:
-
result方法:根据传入的运算符z,对操作数num1和num2进行相应的加减乘除运算,并将结果显示在结果文本框中。同时清空操作数2和运算符。
-
actionPerformed方法:处理按钮的点击事件。根据按钮的动作命令字符串cmd,分别处理数字和小数点按钮的点击,以及加减乘除等号按钮的点击。
- 当点击数字和小数点按钮时,根据当前运算符状态,将数字追加到操作数1或操作数2,并在计算式文本框中显示完整的计算式。
- 当点击加减乘除按钮时,根据当前操作数和运算符状态进行相应的运算,并更新计算式文本框的显示内容。
- 当点击等号按钮时,调用result方法计算结果,并显示在结果文本框中。
4.粘贴功能
实现粘贴功能的方法。该方法首先获取系统剪贴板的内容,然后尝试将内容转换为字符串类型并返回。如果剪贴板的内容为空或不支持字符串类型,则返回空。
在实现过程中,使用了java.awt包中的Toolkit类和Clipboard类,以及java.awt.datatransfer包中的Transferable类和DataFlavor类来获取和处理系统剪贴板的内容。同时,还处理了可能出现的不支持的数据类型和输入输出异常,并进行了相应的异常处理。
五、关键代码
package Ks; import javax.swing.JFrame;//创建和管理窗口框架的类。在这里,它用于创建计算器应用程序的主窗口 import javax.swing.JTextField;//一个用于输入或显示单行文本的文本框组件。在这里,它用于显示计算式和计算结果 import javax.swing.JButton;//提供了一个按钮组件,用户可以点击按钮执行相应的操作。在这里,它用于创建数字按钮和粘贴按钮 import javax.swing.SwingConstants;//提供了一些常量,用于指定文本或图标在组件中的对齐方式。在这里可能被用于设置文本框的对齐方式 import java.awt.event.ActionListener;//用于处理用户接口组件的动作事件(如按钮点击)。在这里,它用于监听按钮的点击事件 import java.awt.event.ActionEvent;//表示由用户界面组件(如按钮)生成的动作事件。在这里,它用于处理按钮的点击事件 import java.awt.Font;//表示字体。在这里,它用于设置文本框和按钮的字体样式 import java.awt.Toolkit;//提供了一种获取系统相关信息的途径。在这里,它用于获取系统剪贴板 import java.awt.datatransfer.Clipboard;//提供了访问剪贴板的类。在这里,它用于访问系统剪贴板 import java.awt.datatransfer.DataFlavor;//表示数据的类型,用于在剪贴板之间传输数据。在这里,它用于指定要获取的剪贴板数据的类型 import java.awt.datatransfer.Transferable;//表示可以传输的数据。在这里,它用于表示从剪贴板获取的数据 import java.awt.datatransfer.UnsupportedFlavorException;//表示不支持的数据类型。在这里,它用于处理不支持的剪贴板数据类型 import java.awt.Color;//表示颜色。在这里,它用于设置文本框和按钮的颜色 import java.awt.event.KeyEvent;//表示键盘事件。在这里,它用于处理键盘输入事件 import java.io.IOException;//表示输入或输出过程中出现的异常。在这里,它用于处理输入/输出异常 import java.awt.event.KeyAdapter;//提供了键盘事件的适配器类。在这里,它用于处理键盘事件的适配器 import java.util.regex.*;//提供了正则表达式的支持。在这里,它用于处理文本框中的输入 import java.math.BigDecimal;//提供了高精度的数学运算。在这里,它用于执行计算 public class Calculator extends JFrame implements ActionListener { private JTextField expText = new JTextField();// 第一行:计算式 private JTextField resultText = new JTextField("0");// 第二行:计算结果,设初始值为0 private String num1="",num2="";//两个操作数 private String fh=""; //运算符 private BigDecimal r; //计算结果 public Calculator() {// 构造方法 // 调用父类的构造函数 super("计算器"); String[] keysValue= { "7", "8", "9", "÷", "4", "5", "6", "×", "1", "2", "3", "-", "0",".", "+","=" };//各个按钮上的文字 String[] actionCmd= { "7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", "0",".", "+","=" };//各个按钮上的动作命令标识 JButton pasteButton = new JButton("粘贴");// 创建一个名为“粘贴”的按钮 pasteButton.setBounds(180, 10, 70, 40);// 设置按钮的位置和大小 pasteButton.setFont(getFont());// 设置按钮的字体样式 this.add(pasteButton);// 将按钮添加到窗口中 JButton keys[]=new JButton[keysValue.length]; // 创建按钮数组,用于存储数字按钮和运算符按钮 Font font=new Font("宋体",Font.PLAIN,18); // 创建字体对象,指定字体样式为宋体,正常样式,字号为18 // 设置计算式文本框的位置、宽度和高度 expText.setBounds(10, 10, 240, 40); expText.setFont(font); // 设置计算式文本框的字体样式 expText.setBackground(Color.white); // 设置计算式文本框的背景颜色为白色 expText.setEditable(false); // 计算式文本框不可编辑,只用于显示计算式 // 设置计算结果文本框的位置、宽度和高度 resultText.setBounds(10, 50, 240, 40); resultText.setFont(font); // 设置计算结果文本框的字体样式 resultText.setBackground(Color.white); // 设置计算结果文本框的背景颜色为白色 resultText.setHorizontalAlignment(SwingConstants.LEFT); // 设置计算结果文本框的对齐方式为左对齐 resultText.setEditable(false); // 计算结果文本框不可编辑,只用于显示计算结果 this.setLayout(null); // 设置窗口的布局为自定义布局,即使用绝对位置和大小来布局组件 this.add(expText); // 将计算式文本框添加到窗口中 this.add(resultText); // 将计算结果文本框添加到窗口中 // 放置按钮 int x=10,y=100; // 设置按钮的初始位置 for (int i=0;i