Java Swing 对话框交互实战解析:登录信息对话框的实现
一、原题完整代码呈现
以下是计算机二级Java考试中关于Swing对话框与事件处理的典型题型,主要考察窗口适配器、按钮事件监听和对话框控制,包含4处需要填写的空白(标记为//*********Found**********
):
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
//*********Found**********
public class Java_3 __________________ WindowAdapter implements ActionListener
{
private JFrame frame;
private JTextField name;
private JPasswordField pass;
private JLabel nameLabel;
private JLabel passLabel;
private JPanel textPanel;
private JPanel labelPanel;
private JButton button;
private JTextArea textArea;
public void initGUI()
{
frame=new JFrame("Frame with Dialog");
frame.addWindowListener(this);
button=new JButton("JDialog");
//*********Found**********
button._______________(this);
textArea=new JTextArea("",3,10);
frame.getContentPane().add(textArea,BorderLayout.CENTER);
frame.getContentPane().add(button,BorderLayout.NORTH);
frame.setSize(400,300);
frame.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
final JDialog dia=new JDialog(frame,"login information");
JButton ok=new JButton("ok");
ok.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
textArea.setText("");
textArea.append("name:"+name.getText()+"\r\n");
textArea.append("passWord:"+new String(pass.getPassword())+"\r\n");
//*********Found**********
dia.setVisible(________________); //隐藏对话框
}
});
name=new JTextField("",10);
pass=new JPasswordField("",10);
pass.setEchoChar('*');
textPanel=new JPanel();
textPanel.setLayout(new GridLayout(2,1,10,10));
textPanel.add(name);
textPanel.add(pass);
nameLabel=new JLabel("name");
passLabel=new JLabel("passWord");
labelPanel=new JPanel();
labelPanel.setLayout(new GridLayout(2,1,20,20));
labelPanel.add(nameLabel);
labelPanel.add(passLabel);
dia.getContentPane().add(labelPanel,BorderLayout.WEST);
dia.getContentPane().add(textPanel,BorderLayout.CENTER);
dia.getContentPane().add(ok,BorderLayout.SOUTH);
dia.setSize(200,130);
dia.setVisible(true);
}
public void windowClosing(WindowEvent event)
{
frame.setVisible(false);
System.exit(0);
}
public static void main(String args[])
{
Java_3 example=new Java_3();
//*********Found**********
example.____________;
}
}
二、空白处逐一解析与解答
1. 第一处空白:类继承声明
答案:extends
//*********Found**********
public class Java_3 extends WindowAdapter implements ActionListener
解析: WindowAdapter
是一个抽象类,提供了窗口事件的空实现方法。通过extends
关键字让Java_3
类继承WindowAdapter
,可以有选择地重写需要的方法(如windowClosing
),而无需实现接口的所有方法。同时类还实现了ActionListener
接口处理动作事件,Java中类只能单继承但可多实现。
2. 第二处空白:绑定按钮监听器
答案:addActionListener
//*********Found**********
button.addActionListener(this);
解析: JButton
需要通过addActionListener()
方法绑定事件监听器。当前类实现了ActionListener
接口(this
指向当前对象),因此将当前对象作为监听器传入,使按钮点击事件能被actionPerformed
方法处理。
3. 第三处空白:隐藏对话框
答案:false
//*********Found**********
dia.setVisible(false); //隐藏对话框
解析: JDialog
的setVisible(boolean b)
方法控制对话框的显示状态:true
表示显示,false
表示隐藏。用户点击"ok"按钮后,需要隐藏对话框,因此传入false
。
4. 第四处空白:初始化GUI界面
答案:initGUI()
//*********Found**********
example.initGUI();
解析: initGUI()
方法是自定义的界面初始化方法,包含创建窗口、添加组件等逻辑。在main
方法中创建Java_3
实例后,需要调用该方法启动界面,否则程序不会显示任何窗口。
三、完整正确代码
四、程序功能与运行说明
程序功能
该程序实现了一个带有登录对话框的Swing应用,核心功能包括:
- 主窗口显示一个"JDialog"按钮和文本区域
- 点击按钮弹出登录对话框,包含用户名输入框、密码框(密码显示为*)和"ok"按钮
- 在对话框中输入信息并点击"ok"后,信息会显示在主窗口的文本区域,同时对话框隐藏
- 关闭主窗口时程序退出
运行说明
- 程序启动后,显示标题为"Frame with Dialog"的主窗口,顶部有"JDialog"按钮,中间是文本区域
- 点击"JDialog"按钮,弹出标题为"login information"的对话框
在对话框中:
- "name"输入框输入用户名(如"admin")
- "passWord"输入框输入密码(如"123456",会显示为"")
- 点击"ok"按钮,对话框隐藏,主窗口文本区域显示输入的信息
- 点击主窗口的关闭按钮(×),程序正常退出
五、核心知识点总结
类的继承与接口实现
- 单继承:通过
extends WindowAdapter
继承窗口适配器类,简化窗口事件处理 - 接口实现:
implements ActionListener
使类具备处理动作事件的能力 - 组合使用:继承抽象类+实现接口,兼顾代码简洁性和功能完整性
- 单继承:通过
Swing组件与布局
- 核心容器:
JFrame
(主窗口)和JDialog
(对话框) - 输入组件:
JTextField
(文本输入)、JPasswordField
(密码输入,setEchoChar('*')
设置显示字符) - 布局管理器:
BorderLayout
(边界布局,分东、南、西、北、中区域)和GridLayout
(网格布局,按行分列组织组件)
- 核心容器:
事件处理机制
- 窗口事件:继承
WindowAdapter
并重写windowClosing
方法,处理窗口关闭事件 - 动作事件:实现
ActionListener
接口的actionPerformed
方法,处理按钮点击事件 - 匿名监听器:对话框的"ok"按钮使用
new ActionListener(){...}
创建匿名监听器,简化代码
- 窗口事件:继承
对话框控制
- 创建方式:
new JDialog(父窗口, 标题)
关联主窗口 - 显示/隐藏:
setVisible(true)
显示对话框,setVisible(false)
隐藏对话框 - 数据传递:对话框组件(
name
、pass
)的内容通过getText()
和getPassword()
获取并传递到主窗口
- 创建方式:
六、常见错误与应试技巧
常见错误分析
- 第一处空白误用
implements
:WindowAdapter
是抽象类而非接口,必须用extends
继承 - 第二处空白事件绑定错误:写成
addActionLister
(拼写错误)或参数错误,导致按钮点击无响应 - 第三处空白传入
true
:会使对话框保持显示,不符合"隐藏对话框"的需求 - 第四处空白忘记调用初始化方法:不调用
initGUI()
会导致界面无法显示
- 第一处空白误用
应试技巧
- 继承与实现区分:"类用
extends
,接口用implements
" - 事件绑定模板:
组件.addActionListener(监听器对象)
是固定写法 - 可见性控制:记住
setVisible(false)
隐藏组件,true
显示组件 - 程序启动流程:
main
方法中通常需要创建实例并调用初始化方法(如initGUI()
)
- 继承与实现区分:"类用
通过本题,我们掌握了Swing中对话框与主窗口的交互方式、事件监听器的多重应用以及布局管理器的使用。这类知识点在实际开发中广泛应用于用户登录、信息输入等场景,是Java桌面应用开发的基础,也是计算机二级Java考试中GUI部分的重点考察内容。