### 知识点分析 #### 一、Java Swing 基础组件介绍及应用 - **JFrame**:这是Swing中的顶级容器,通常作为窗口的主体。在本例中,“JFrame jf = new JFrame("");”创建了一个无标题的新窗口。 - **JPanel**:面板容器,可以容纳其他组件或容器。它支持多种布局管理器,如`BorderLayout`、`GridLayout`等。本例中创建了多个面板来组织按钮和其他组件。 - **JButton**:用于创建按钮。通过构造函数可以设置按钮上的文本或图标。 - **JTextField**:用于显示和编辑单行文本的组件。可以设置其对齐方式,如右对齐(`textField.setHorizontalAlignment(textField.RIGHT);`)。 - **GridLayout**:将容器划分为具有固定大小的网格,每个单元格都有一个组件。此布局管理器非常适合于本例中的数字键盘布局。 - **BorderLayout**:将容器分为五个区域(北、南、东、西、中心),每个区域只能放置一个组件。 #### 二、事件监听器(ActionListener) - 在Swing中,按钮等控件可以通过添加监听器的方式响应用户交互。 - `ActionListener`接口定义了一个方法`actionPerformed(ActionEvent e)`,该方法在触发动作时被调用。 - 示例中,每个按钮都通过匿名内部类实现了`ActionListener`接口,并重写了`actionPerformed`方法,当按钮被点击时执行相应的逻辑。 #### 三、变量作用域与生命周期 - 本例中定义了一些静态变量,如`s`、`d1`、`sum`、`a`和`b`。 - **s**:用于存储输入的字符串,每次用户点击数字按钮时都会更新。 - **d1**:初始化为0,但未在代码中使用。 - **sum**:初始化为0,用于存储计算结果。 - **a**:初始化为0,用途不明。 - **b**:初始化为true,用于控制程序流程。 - 这些变量在整个程序运行期间都存在,它们的作用域覆盖了整个类,因此可以在类中的任何地方访问。 #### 四、代码缺陷与改进建议 - **重复代码**:每个数字按钮的事件处理逻辑几乎相同,可以通过提取公共方法减少代码重复。 - **无效代码**:存在一些无效的代码片段,例如: - ```java if (d1 == 0) { b = false; } ``` 这段代码始终不会被执行,因为`d1`的初始值为0且没有后续逻辑改变它的值。 - **计算功能缺失**:当前代码仅实现了数字的输入,未包含任何实际的计算逻辑。 - **界面布局优化**:虽然使用了`GridLayout`,但按钮之间的间距和布局可能还需要进一步调整以提高用户体验。 - **异常处理**:目前代码缺少对异常情况的处理,例如输入非数字字符、除数为零等情况。 #### 五、代码改进示例 - 可以考虑使用一个循环来创建数字按钮,减少重复代码。 - 添加运算符按钮(+、-、*、/)并实现相应的计算逻辑。 - 引入简单的异常处理机制,比如检测除数是否为零。 - 使用更现代的UI框架如JavaFX提升界面美观度和交互性。 虽然这个简单计算器的基本结构已经搭建完成,但仍有许多方面需要改进和完善,包括代码重构、功能扩展以及异常处理等。
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Test2 {
static String s="";
static double d1=0;
static double sum=0;
static int a=0;
static boolean b=true;
public static void main(String[] args) {
JFrame jf=new JFrame("计算器");
final JTextField textField=new JTextField(30);//文本框
textField.setHorizontalAlignment(textField.RIGHT);//右对齐
textField.setText("0");
if(d1==0){
b=false;
}
JPanel jp0=new JPanel();
jp0.setLayout(new GridLayout(1,1,5,5));
jp0.add(textField);
JPanel jp=new JPanel();
JPanel jp1=new JPanel();
jp1.setLayout(new GridLayout(1,2,3,3));
JButton b1=new JButton("1");
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
textField.setText(s+"1");
s=s+"1";
}
});
JButton b2=new JButton(s+"2");
b2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
textField.setText(s+"2");
s=s+"2";
}
});
JButton b3=new JButton("3");
b3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
textField.setText(s+"3");
s=s+"3";
}
});
JButton b4=new JButton("4");
b4.addActionListener(new ActionListener() {
@Override
剩余9页未读,继续阅读
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助