### Java计算器源码解析
#### 一、概述
本文将对一份Java计算器源码进行详细的分析与解释。该源码采用纯Java编写,利用Swing框架实现了一个图形界面的计算器功能,适合Java初学者学习使用。
#### 二、源码结构分析
##### 1. 类与包结构
代码定义了一个名为`counter`的类,该类继承自`JFrame`,并且实现了`ActionListener`接口。这表明`counter`类不仅具备窗口的功能,还能够响应用户的交互事件(如按钮点击)。
```java
package mycounter; // 包名应为mycounter而非packagemycounter
```
注意:实际的包声明应该是`package mycounter;`而不是`packagemycounter;`。
##### 2. 成员变量
- `JFrame Jf`:表示主窗口。
- `JPanel Jp1`、`JPanel Jp2`:两个面板,分别用于存放文本框和按钮。
- `JTextField Jtf`:文本框,用于显示计算结果和用户输入的数值。
- `String str[]`:数组,存储计算器按钮上的文字。
- `JButton JBu`:按钮组件。
- `String operator`:操作符,记录用户选择的操作类型。
- `String num`:数字,用于存储当前输入的数字。
- `double one`、`double two`:用于存储计算过程中的数值。
- `boolean bool`:布尔值,用于判断是否允许输入数字或操作符。
##### 3. 构造函数与初始化方法
- `public counter()`:构造函数,调用`init()`方法完成初始化。
- `public void init()`:初始化方法,设置窗口大小、布局,并添加各个组件到面板上。
##### 4. 动作监听处理
- `public void actionPerformed(ActionEvent e)`:动作监听器方法,当用户点击按钮时触发此方法。
#### 三、具体功能实现
##### 1. 按钮布局与事件绑定
在`init()`方法中,通过循环遍历字符串数组`str`创建了多个按钮,并将它们添加到`Jp2`面板上。每个按钮都绑定了一个`ActionListener`事件监听器,即当前类自身。
```java
for (int i = 0; i < 20; i++) {
JBu = new JButton(str[i]);
JBu.addActionListener(this);
Jp2.add(JBu);
}
```
##### 2. 功能逻辑处理
在`actionPerformed()`方法中,根据用户点击的不同按钮执行不同的逻辑:
- **数字键**:如果当前允许输入数字,则将数字添加到文本框中。
- **小数点**:确保每次只输入一个小数点。
- **数学函数**(如sin、cos、tan、Int):读取当前文本框中的数字,执行相应的数学运算,并更新文本框中的内容。
- **运算符**(如+、-、*、/):保存当前输入的数字和操作符,并清空文本框以便用户输入下一个数字。
- **等号键**:执行最终的计算并显示结果。
##### 3. 数学函数处理
例如,在按下“sin”、“cos”、“tan”按钮时,会调用`operation1()`方法来处理三角函数:
```java
public void operation1() {
one = Double.parseDouble(num);
if (s == "sin") {
Jtf.setText("" + Math.sin(one));
}
if (s == "cos") {
Jtf.setText("" + Math.cos(one));
}
if (s == "tan") {
Jtf.setText("" + Math.tan(one));
}
if (s == "Int") {
int i = (int) one;
// System.out.println(i)
}
}
```
这里还缺少对于整数转换(`Int`)功能的具体实现。
#### 四、总结
这份Java计算器源码提供了一个简单的图形界面计算器示例,包含了基本的数学运算功能以及一些高级数学函数的支持。通过阅读和理解这份代码,Java初学者可以更好地掌握Swing框架的基本用法以及如何实现用户交互逻辑。同时,也可以在此基础上进一步扩展和完善计算器的功能,比如增加更多高级数学运算、支持更复杂的表达式解析等。