### JAVA编的小程序—计算器分析 #### 一、程序概述 本程序是一个简单的基于Java Swing图形用户界面(GUI)的计算器应用。它适用于初学者学习Java编程基础,并且能够加深对Swing组件的理解。 #### 二、代码结构解析 1. **类定义**: ```java class Jsqzj implements ActionListener ``` - 定义了一个名为`Jsqzj`的类,并实现了`ActionListener`接口,以便响应按钮点击事件。 2. **成员变量**: - `JButton b1, b2, ..., b16;`:定义了16个按钮对象,分别代表数字键和运算符键。 - `JFrame f;`:定义了一个窗口对象。 - `GridLayout c = new GridLayout(4, 4);`:定义了一个4行4列的网格布局管理器。 - `JTextField tf = new JTextField();`:定义了一个文本字段用于显示计算结果和输入数值。 - `Vector v, v2;`:用于存储计算过程中的数值和运算符。 3. **初始化方法**: - `public void init()`:负责创建和初始化所有组件。 - 创建了一个新的`JFrame`对象,并设置了其标题。 - 设置文本字段为右对齐。 - 创建了一个面板,并设置其布局为4x4的网格布局。 - 创建了16个按钮,并将它们添加到面板上。 - 添加了动作监听器。 - 设置窗口关闭时退出程序。 - 设置窗口大小并使其可见。 4. **构造函数**: - `public Jsqzj()`:初始化两个向量`v`和`v2`,用于存储操作数和运算符。 5. **动作监听器**: - `public void actionPerformed(ActionEvent e)`:处理按钮点击事件。 - 获取文本字段的内容。 - 检查用户是否点击了运算符按钮,如果是,则执行相应的逻辑处理。 #### 三、详细代码解析 1. **按钮创建与添加**: - 在`init`方法中,通过循环创建了16个按钮,并分别给每个按钮设置了文本内容(如“1”、“+”等),然后将这些按钮添加到了面板上。 - 使用`addActionListener(this)`方法为每个按钮添加了动作监听器,这样当按钮被点击时,就会调用`actionPerformed`方法。 2. **布局管理**: - 使用`GridLayout`来组织按钮,使得按钮以整齐的4x4矩阵形式排列。 - 文本框位于窗口顶部,方便用户查看和输入数据。 3. **文本框功能**: - 文本框用于显示用户输入的数字和计算结果。 - 文本框默认是左对齐的,但这里将其设置为了右对齐,以便于模拟真实的计算器界面。 4. **运算逻辑**: - 在`actionPerformed`方法中,根据用户点击的按钮类型进行不同的处理。 - 如果用户点击的是运算符按钮(如“+”、“-”等),则会根据当前的计算状态更新`v`和`v2`向量中的值。 #### 四、运行流程 1. **启动程序**: - 创建`Jsqzj`类的对象,并调用`init`方法初始化界面。 - 用户可以看到一个具有数字按钮和运算符按钮的计算器界面。 2. **输入数字**: - 用户点击数字按钮,数字会依次显示在文本框中。 3. **选择运算符**: - 当用户点击运算符按钮时,会将运算符存入`v2`向量,并准备进行下一次数字输入或运算。 4. **计算结果**: - 当用户点击“=”按钮时,根据`v`和`v2`中的值计算最终结果,并显示在文本框中。 #### 五、学习价值 - **Java GUI编程**:本程序是一个很好的Java Swing GUI编程示例,可以帮助初学者理解如何使用Swing构建图形用户界面。 - **事件处理机制**:通过实现`ActionListener`接口,学习如何响应用户交互事件。 - **数据结构应用**:使用`Vector`来存储操作数和运算符,加深对Java集合框架的理解。 - **面向对象设计**:程序采用面向对象的方式编写,有助于学习面向对象的设计原则。 这个简单的计算器程序不仅是一个实用的工具,更是一个非常适合Java初学者用来实践和巩固所学知识的好例子。
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
class Jsqzj implements ActionListener
{
JButton b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16;
JFrame f;
GridLayout c=new GridLayout(4,4);
JTextField tf = new JTextField();
public void init()
{
f=new JFrame("CardLayout testing");
Container ct = f.getContentPane();
tf.setHorizontalAlignment(JTextField.RIGHT);
ct.add(tf,"North");
JPanel p2=new JPanel();
ct.add(p2,"Center");
GridLayout c=new GridLayout(4,4);
p2.setLayout(c);
JButton b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16;
b1=new JButton("1");
b2=new JButton("2");
b3=new JButton("3");
b4=new JButton("4");
b5=new JButton("5");
b6=new JButton("6");
b7=new JButton("7");
b8=new JButton("8");
b10=new JButton("0");
b11=new JButton(".");
b12=new JButton("=");
b13=new JButton("+");
b14=new JButton("-");
b15=new JButton("x");
b16=new JButton("/");
p2.add(b1);
b1.addActionListener(this);
p2.add(b2);
b2.addActionListener(this);
p2.add(b3);
b3.addActionListener(this);
p2.add(b13);
b13.addActionListener(this);
p2.add(b4);
b4.addActionListener(this);
p2.add(b5);
b5.addActionListener(this);
p2.add(b6);
b6.addActionListener(this);
p2.add(b14);
b14.addActionListener(this);
p2.add(b7);
b7.addActionListener(this);
p2.add(b8);
b8.addActionListener(this);
p2.add(b9);
剩余13页未读,继续阅读
- 粉丝: 2
- 资源: 13
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- LLVM MachineScheduler UML 图
- 《算法设计与分析报告》
- Discuz插件 微信购买会员用户组V2.180418商业版
- CSP-JS2024第二轮官方测试数据
- 适用于typora编辑器的主题.zip
- chromedriver-win64-132.0.6824.0.zip
- chromedriver-win64-132.0.6823.0.zip
- chromedriver-win64-132.0.6821.2.zip
- petr按照j6中对transformer的处理进行优化,代码及结果
- PandaX是Go语言开源的企业级物联网平台低代码开发基座,支持设备管控,规则链,云组态,可视化大屏,报表设计器,表单设计器等功