Java程序员_编程开发学习笔记_网站安全运维教程_渗透技术教程

Java Swing QQ登录界面实现:从组件布局到事件监听

阿贵
9月7日发布 /正在检测是否收录...
温馨提示:
本文最后更新于2025年09月07日,已超过9天没有更新,若内容或图片失效,请留言反馈。

Java Swing QQ登录界面实现:从组件布局到事件监听

127.png

一、原题完整代码呈现

以下是Java Swing实现的模拟QQ登录界面程序,包含窗口设置、组件布局、事件监听等功能,涉及5处需要填写的空白(标记为//**********found**********):

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

//**********found**********
public class _________ extends JFrame {
    private JTextField username;
    private JPasswordField password;
    private JLabel jl1;
    private JLabel jl2;
    private JLabel jl3;
    private JLabel jl4;
    private JButton bu1;
    private JButton bu2;
    private JButton bu3;
    private JCheckBox jc1;
    private JCheckBox jc2;
    private JComboBox jcb;
    
    public Java_3() {
        this.setTitle("QQ2022正式版");        
        init();
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 设置布局方式为绝对定位
        this.setLayout(null);

        this.setBounds(0, 0, 355, 265);
        // 设置窗体的标题图标
        Image image = new ImageIcon("a.png").getImage();
        this.setIconImage(image);
        // 窗体大小不能改变
        this.setResizable(false);
        // 居中显示
        this.setLocationRelativeTo(null);
       //**********found**********
        this._______(true);
    }

    public void init() {
        Container con = this.getContentPane();
        jl1 = new JLabel();
        // 设置背景图片
        Image image1 = new ImageIcon("background.jpg").getImage();
        jl1.setIcon(new ImageIcon(image1));
        jl1.setBounds(0, 0, 355, 265);

        jl2 = new JLabel();
        Image image2 = new ImageIcon("a.gif").getImage();
        jl2.setIcon(new ImageIcon(image2));
        jl2.setBounds(40, 95, 50, 60);

        //**********found**********
        username = new ____________();
        username.setBounds(50, 50, 150, 20);
        jl3 = new JLabel("注册账号");
        jl3.setBounds(210, 50, 70, 20);
        password = new JPasswordField();
        password.setBounds(50, 80, 150, 20);
        jl4 = new JLabel("找回密码");
        jl4.setBounds(210, 80, 70, 20);
        jc1 = new JCheckBox("记住密码");
        jc1.setBounds(125, 135, 80, 15);
        jc2 = new JCheckBox("自动登录");
        jc2.setBounds(215, 135, 80, 15);
        jcb = new JComboBox();
        jcb.addItem("在线");
        jcb.addItem("隐身");
        jcb.addItem("离开");
        jcb.setBounds(40, 135, 55, 20);
        bu1 = new JButton("登录");
        bu1.setBounds(250, 200, 65, 20);
        
        bu2 = new JButton("多账号");
        bu2.setBounds(25, 200, 75, 20);
        bu3 = new JButton("设置");
        bu3.setBounds(140, 200, 65, 20);  
        bu3.addActionListener(new ActionListener() {
           //**********found**********
            public void ____________(ActionEvent e) {
                  if (jc1.isSelected()==true)
                        JOptionPane.showConfirmDialog(null,"确定记住密码吗?");
            }
        });
        // 所有组件用容器装载
        jl1.add(jl2);
        jl1.add(jl3);
        jl1.add(jl4);
        jl1.add(jc1);
        jl1.add(jc2);
        jl1.add(jcb);
        jl1.add(bu1);
        jl1.add(bu2);
        jl1.add(bu3);
        con.add(jl1);
        con.add(username);
        con.add(password);
    }
    //**********found**********
    public static void _________ (String[] args) {
        Java_3 qq = new Java_3();
    }
}

二、空白处逐一解析与解答

1. 第一处空白:类名定义(继承JFrame)

答案:Java_3

//**********found**********
public class Java_3 extends JFrame {

解析
Java类名必须与构造方法名一致,代码中存在构造方法public Java_3(),因此类名必须为Java_3。该类继承JFrame,表示这是一个窗口类,用于创建GUI界面。

2. 第二处空白:设置窗口可见的方法

答案:setVisible

       //**********found**********
        this.setVisible(true);

解析
JFramesetVisible(boolean b)方法用于控制窗口是否可见。参数为true时窗口显示,false时隐藏。在初始化窗口后需调用此方法使窗口可见,因此填写setVisible

3. 第三处空白:实例化用户名输入框

答案:JTextField

        //**********found**********
        username = new JTextField();

解析
username的声明类型为JTextField(文本输入框),此处需创建其实例。JTextField用于接收用户输入的明文信息(如用户名),因此通过new JTextField()实例化,填写JTextField

4. 第四处空白:ActionListener接口的事件处理方法

答案:actionPerformed

           //**********found**********
            public void actionPerformed(ActionEvent e) {

解析
ActionListener接口要求实现actionPerformed(ActionEvent e)方法,该方法在事件触发时(如按钮点击)执行。此处为“设置”按钮添加点击事件处理,需重写该方法,因此填写actionPerformed

5. 第五处空白:程序入口主方法名

答案:main

    //**********found**********
    public static void main (String[] args) {

解析
Java程序的入口是main方法,格式为public static void main(String[] args)。此处需定义主方法以启动程序,因此填写main

三、完整正确代码

四、程序功能与运行说明

程序功能

该程序模拟QQ登录界面,实现以下功能:

  1. 创建标题为“QQ2022正式版”的窗口,固定大小(355×265),居中显示,不可调整大小;
  2. 界面包含:用户名输入框、密码输入框(密码隐藏)、“注册账号”和“找回密码”链接、“记住密码”和“自动登录”复选框、状态选择下拉框(在线/隐身/离开)、“登录”“多账号”“设置”按钮;
  3. 点击“设置”按钮时,若勾选“记住密码”,则弹出确认对话框;
  4. 窗口关闭时程序退出。
运行说明
  1. 界面布局:

    • 背景图片:通过jl1标签加载background.jpg作为背景;
    • 头像区域:jl2标签加载a.gif作为头像;
    • 输入区域:username(用户名,JTextField)和password(密码,JPasswordField)分别位于上方和中间;
    • 功能区域:复选框、下拉框和按钮按位置排列,通过setBounds(x, y, width, height)设置绝对位置。
  2. 交互效果:

    • 点击“设置”按钮:触发actionPerformed方法,检查jc1(记住密码复选框)是否选中,若选中则显示“确定记住密码吗?”的确认对话框;
    • 窗口关闭:通过setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)设置关闭时退出程序。
  3. 注意事项:

    • 程序依赖图片文件(a.pngbackground.jpga.gif),需确保这些文件与类文件在同一目录,否则图片无法显示;
    • 绝对定位(setLayout(null))需手动设置每个组件的位置和大小,适合固定布局的界面。

五、核心知识点总结

  1. Swing窗口基础

    • 类继承:通过extends JFrame使自定义类成为窗口类,继承JFrame的所有属性和方法;
    • 窗口设置:

      • setTitle(String title):设置窗口标题;
      • setBounds(int x, int y, int width, int height):设置窗口位置和大小;
      • setResizable(boolean resizable):设置窗口是否可调整大小(false为固定大小);
      • setLocationRelativeTo(null):使窗口居中显示;
      • setDefaultCloseOperation(int operation):设置窗口关闭操作(JFrame.EXIT_ON_CLOSE表示退出程序);
      • setVisible(boolean b):控制窗口可见性(必须调用才会显示窗口)。
  2. Swing核心组件

    • JTextField:单行文本输入框,用于输入用户名等明文信息;
    • JPasswordField:密码输入框,输入内容以圆点或星号显示,保护隐私;
    • JLabel:标签组件,可显示文本或图片(通过setIcon(Icon icon)设置图片);
    • JCheckBox:复选框,用于“记住密码”“自动登录”等可多选的选项(isSelected()判断是否选中);
    • JComboBox:下拉选择框,用于选择状态(在线/隐身/离开),通过addItem(Object item)添加选项;
    • JButton:按钮组件,用于触发操作(如“登录”“设置”)。
  3. 布局管理与组件定位

    • 绝对定位:setLayout(null)禁用默认布局,通过setBounds(x, y, width, height)手动设置组件位置(x,y为左上角坐标,width和height为宽高);
    • 容器层级:通过Container con = getContentPane()获取内容面板,组件需添加到面板或其他容器(如jl1标签)中才能显示;
    • 组件添加:add(Component comp)方法用于将组件添加到容器,添加顺序可能影响显示层级(后添加的组件可能覆盖先添加的)。
  4. 事件监听机制

    • 监听器注册:bu3.addActionListener(new ActionListener(){...})为“设置”按钮注册动作监听器;
    • 事件处理:实现ActionListener接口的actionPerformed(ActionEvent e)方法,编写按钮点击后的逻辑(此处判断复选框状态并显示对话框);
    • 对话框:JOptionPane.showConfirmDialog(null, String message)显示确认对话框,用于简单交互。
  5. 程序入口

    • 主方法:public static void main(String[] args)是程序入口,通过new Java_3()创建窗口实例,触发构造方法执行,完成界面初始化。

六、常见错误与应试技巧

  1. 常见错误分析

    • 第一处空白类名错误:写成QQLogin等其他名称(必须与构造方法Java_3()一致,否则编译错误);
    • 第二处空白方法名错误:写成setVisible()(多写括号,此处是方法调用,需带参数true,但空白处仅需方法名)或showJFrameshow()方法已过时,推荐setVisible);
    • 第三处空白组件类型错误:写成JTextArea(多行文本框,不适合输入用户名)或JPasswordField(与密码框重复,用户名需明文显示);
    • 第四处空白方法名错误:写成actionPerform(拼写错误,正确为actionPerformed)或onClick(非ActionListener接口的方法);
    • 第五处空白方法名错误:写成Main(Java区分大小写,必须小写main)或遗漏static(主方法必须静态)。
  2. 应试技巧

    • 类名与构造方法:“类名构造名相同,继承JFrame做窗口, extends关键字不能少”;
    • 窗口可见性:“窗口创建后要显示,setVisible(true)来调用,参数true是关键”;
    • 组件实例化:“文本输入用JTextField,密码用JPasswordField,new关键字来创建”;
    • 事件处理:“按钮点击要响应,ActionListener来实现,方法名是actionPerformed”;
    • 主方法格式:“程序入口是main,public static void不能改,String数组做参数”。

通过本题,我们掌握了Swing窗口创建、核心组件使用、绝对布局、事件监听及程序入口等知识点。这类题型是“Java GUI编程”的典型体现,实际开发中,除了绝对布局,还可使用FlowLayoutGridBagLayout等更灵活的布局管理器,同时需注意资源文件(如图片)的路径处理。

喜欢就支持一下吧
点赞 0 分享 收藏
评论 抢沙发
OωO
取消 登录评论