Swing组件组合使用--登录界面源码(仿QQ)

简介: Swing组件组合使用--登录界面源码(仿QQ)

分为三部分,已连接客户端,下面是登录相关源码,期待下期分享客户端与服务端!

创建面板:

import java.awt.*;
import javax.swing.*;
// QQ登录主界面初始化类
public class QQLogin {
    // 1、为QQ登录界面整体初始化一个JFrame窗口
    private static JFrame jf = new JFrame();
    // QQ登录窗口初始化方法
    public static void initLogin() {
        jf.setSize(426, 300);     // 设置窗口尺寸
        jf.setLocation(497, 242); // 设置窗口在屏幕显示位置
        jf.setUndecorated(true);  // 设置JFrame窗口边框不显示
        jf.setResizable(false);   // 禁止改变窗口大小
        // 2、根据QQ登录界面效果,进行布局分配
        BorderLayout border_layout = new BorderLayout();
        jf.setLayout(border_layout);
        // 2.1、创建并加入顶部面板
        JPanel panel_north = CreatePanel.CreateNorthPanel(jf);
        jf.add(panel_north, BorderLayout.PAGE_START);
        // 2.2、创建并加入中部面板
        JPanel panel_center = CreatePanel.CrateCenterPanel(jf);
        jf.add(panel_center, BorderLayout.CENTER);
        // 2.3、创建并加入左侧面板
        JPanel panel_west = CreatePanel.CreateWestPanel();
        jf.add(panel_west, BorderLayout.LINE_START);
        // 2.4、创建并加入底部面板
        JPanel panel_south = CreatePanel.CreateSouthPanel();
        jf.add(panel_south, BorderLayout.PAGE_END);
        // 2.5、创建并加入右侧面板
        JPanel pannel_east = CreatePanel.CrateEastPanel();
        jf.add(pannel_east, BorderLayout.LINE_END);
        jf.setVisible(true);    // 设置窗口可见
    }
    // QQ登录程序入口
    public static void main(String[] args) {
        // 使用SwingUtilities工具类调用createAndShowGUI()方法并显示GUI程序
        SwingUtilities.invokeLater(QQLogin::initLogin);
    }

}

具体面板布局实现:

import java.awt.*;
import javax.swing.*;
// QQ登录界面布局面板创建和设置
public class CreatePanel {
    private static LoginListener ll =null;
    /**
     * 创建并设置QQ登录界面顶部布局面板
     * @param jf  QQ登录界面窗口对象
     * @return    返回创建的当前顶部面板对象
     */
    public static JPanel CreateNorthPanel(JFrame jf){  
        // 1、创建一个JPanel顶部面板
        JPanel panel=new JPanel();  
        // 取消面板内默认布局
        panel.setLayout(null);     
        // 设置顶部面板尺寸 
        panel.setPreferredSize(new Dimension(0, 140));  
        // 1.1、向顶部面板添加背景图片
        ImageIcon image=new ImageIcon("JPG/11.png");
        JLabel background=new JLabel(image);  
        // 设置背景图片的位置及尺寸
        background.setBounds(0,0,426,image.getIconHeight());     
        panel.add(background);  
        // 1.2、在顶部JPanel面板右上角添加一个退出按钮
        JButton out = new JButton(new ImageIcon("JPG/x1.png"));
        out.setBounds(403,0,26,26);
        // 设置鼠标移动到退出按钮时更改图片
        out.setRolloverIcon(new ImageIcon("JPG/x2.jpg"));
        // 取消按钮边框效果
        out.setBorderPainted(false);
        panel.add(out);
        // 为退出按钮注册监听器,用来关闭窗口
        out.addActionListener(event -> jf.dispose());
        return panel;  
    }  
    /** 
     * 创建并设置QQ登录界面左侧布局面板
     * @return  返回创建的当前左侧面板对象
     */
    public static JPanel CreateWestPanel(){
        // 1、创建一个JPanel左侧面板
        JPanel panel=new JPanel();  
        panel.setLayout(null);  
        panel.setPreferredSize(new Dimension(130,0));
        // 1.1、向左侧面板添加背景图片
        ImageIcon image=new ImageIcon("JPG/13.png");
        JLabel  background=new JLabel(image);  
        background.setBounds(20, -20, 125, 130);
        panel.add(background);  
        return panel;  
    }  
    /**
     * 创建并设置QQ登录界面中部布局面板
     *       QQ登录界面窗口对象
     *     返回创建的当前中部面板对象
     */
    public static JPanel CrateCenterPanel(JFrame jf){  
        // 1、创建一个JPanel中部面板  
        JPanel panel = new JPanel();  
        panel.setLayout(null);  
        // 1.1 创建一个JcomboBox下拉框组件,并初始化QQ账号 
        String str []= {"罗大壮","冯狗蛋","张三","罗老师"};
        JComboBox<Object> jcoCenter = new JComboBox<Object>(str);  
        panel.add(jcoCenter);
        panel.setFont(new Font("方正粗黑宋简体",0,13));
        panel.setForeground(new Color(222, 126, 39));
        // 设置下拉框可编辑  
        jcoCenter.setEditable(true);  
        jcoCenter.setBounds(0, 15, 175, 30);
        // 设置下拉框内容字体
        jcoCenter.setForeground(new Color(100,149,238));
        jcoCenter.setFont(new Font("Calibri ",0,13));  
        // 1.2、创建一个JPasswordField密码框组件  
        JPasswordField jpaCenter = new JPasswordField();  
        // 设置密码框面板为FlowLayout流失布局
        jpaCenter.setLayout(new FlowLayout(FlowLayout.RIGHT,0,0));  
        jpaCenter.setBounds(0, 44, 175, 30);  
        jpaCenter.setPreferredSize(new Dimension(185,25)); 
        panel.add(jpaCenter); 
        // 1.3、创建ImageIcon小键盘图标组件,并加入到密码框组件中  
        ImageIcon image = new ImageIcon("JPG/jian.jpg");
        JButton jbu = new JButton(image);  
        jbu.setPreferredSize(new Dimension(20,20));
        jbu.setBorderPainted(false);  
        jpaCenter.add(jbu);  
        // 1.4、创建两个JCheckBox多选框组件 
        JCheckBox jch1 = new JCheckBox("记住密码"); 
        // 设置选中时不显示边框
        jch1.setFocusPainted(false); 
        jch1.setFont(new Font("方正粗黑宋简体",0,13));
        jch1.setForeground(new Color(222, 126, 39));
        jch1.setBounds(0, 85, 80, 20);  
        panel.add(jch1);  
        JCheckBox jch2 = new JCheckBox("自动登录");  
        jch2.setFocusPainted(false);  
        jch2.setFont(new Font("方正粗黑宋简体",0,12));
        jch2.setForeground(new Color(222, 126, 39));
        jch2.setBounds(100, 85, 80, 20);  
        panel.add(jch2);  
        // 2、在中部面板初始化登录监听器,封装账号和密码
        ll = new LoginListener(jcoCenter, jpaCenter, jf);
        return panel;  
    }  
    /**
     * 创建并设置QQ登录界面右侧布局面板 
     * @return 返回创建的当前右侧面板对象
     */
    public static JPanel CrateEastPanel(){
        // 1、创建一个JPanel右侧面板 
        JPanel panel=new JPanel();  
        panel.setLayout(null);  
        panel.setPreferredSize(new Dimension(100, 0));  
        // 1.1、创建两个创建两个JLabel标签组件
        JLabel regeist=new JLabel("注册账号");  
        regeist.setForeground(new Color(142, 191, 66));
        regeist.setBounds(0, 13, 60, 30);  
        regeist.setFont(new Font("宋体",0,12));  
        // 2、创建一个JPanel右侧面板 
        JLabel regetpwd=new JLabel("找回密码");  
        regetpwd.setForeground(new Color(142, 191, 66));
        regetpwd.setBounds(0, 43, 60, 30);  
        regetpwd.setFont(new Font("宋体",0,12));  
        panel.add(regetpwd);  
        panel.add(regeist);  
        return panel;  
    }  
    /**
     * 创建并设置QQ登录界面底部布局面板
     * @return 返回创建的当前底部面板对象
     */
    public static JPanel CreateSouthPanel(){  
        // 1、创建一个JPanel底部面板   
        JPanel panel = new JPanel();  
        panel.setPreferredSize(new Dimension(0,51));  
        panel.setLayout(null);  
        // 1.1、创建左下角多人登录图标组件
        JButton jble = new JButton(
                new ImageIcon("images/single_normal.jpg"));
        jble.setPreferredSize(new Dimension(40,40));  
        jble.setFocusPainted(false);  
        jble.setRolloverIcon(new ImageIcon("images/single_down.jpg"));  
        jble.setBorderPainted(false);  
        // 设置不显示按钮区域
        jble.setContentAreaFilled(false);  
        jble.setBounds(0,10,40,40);  
        jble.setToolTipText("多账号登录");  
        // 1.2、创建底部中间登录图标组件 
        ImageIcon image = new ImageIcon("JPG/deng.png");
        JButton jb = new JButton("      ",image);
        jb.setFont(new Font("方正粗黑宋简体",0,13));
        jb.setBounds(130,0,175,40);
        // 将文字放在图片中间  
        jb.setHorizontalTextPosition(SwingConstants.CENTER);
        jb.setFocusPainted(false);  
        jb.setContentAreaFilled(false); 
        jb.setBorderPainted(false);  
        jb.setRolloverIcon(new ImageIcon("JPG/deng2.jpg" + ""));
        // 1.2、创建右下角二维码登录图标组件 
        JButton jbri = new JButton(
                    new ImageIcon("JPG/t1.png"));
        jbri.setBounds(360,-15,80,80);
        jbri.setFocusPainted(false); 
        jbri.setBorderPainted(false);  
        jbri.setContentAreaFilled(false);  
        jbri.setRolloverIcon(new ImageIcon("JPG/t2.jpg"));
        jbri.setToolTipText("二维码登录"); 
        // 将底部3个组件添加到底部JPanel面板中
        panel.add(jble);  
        panel.add(jb);  
        panel.add(jbri);         
        // 2、为【登录】按钮注册监听器,后台检测QQ账号、密码是否正确 
        jb.addActionListener(ll);
        return panel;  
    }  
}  

登录监视器:

import com.Dazhuang.ClientChat;

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

// QQ登录监听器
public class LoginListener implements ActionListener {
    private JComboBox<Object> jco; // 用来获取QQ账号的对象
    private JPasswordField jpa; // 用来获取QQ密码的对象
    private JFrame jf;
    public LoginListener(JComboBox<Object> jco, JPasswordField jpa, JFrame jf) {
        super();
        this.jco = jco;
        this.jpa = jpa;
        this.jf = jf;
    }
    /**
     * 为登录动作监听事件执行处理
     */
    public void actionPerformed(ActionEvent e) {

            // 1、获取登录的账号和密码
            String name = (String) jco.getSelectedItem();
            String pwd = new String(jpa.getPassword());
            // 2、判断输入的账号和密码是否正确
            if ( pwd.equals("123")) {
                // 账号正确,先关闭当前JFrame登录窗口
                jf.dispose();
                new ClientChat(name);

            } else {
                // QQ账号或密码输入错误,弹出提示信息

                JOptionPane.showMessageDialog(null, "账户名或密码都输错了,老六再输一遍!!");
            }

    }
}
相关文章
|
12天前
|
存储 人工智能 弹性计算
2026年阿里云618大促政策详解:新老用户权益与补贴规则
2026年阿里云618以**“AI加速季,智惠生产力”**为主题,活动周期为6月1日至6月30日,为期30天,是阿里云年度力度最大的云产品促销活动。本次大促投入**5亿元算力补贴**,覆盖轻量应用服务器、ECS云服务器、GPU高性能实例、数据库、AI大模型、存储与CDN等全品类产品,构建“新客秒杀、老客同价、企业补贴、AI特惠”的完整优惠体系。政策层面打破行业“首年低价、次年涨价”的痛点,推出**续费同价至2029年**、**新老用户权益互通**、**企业迁云高额补贴**等核心规则,同时将AI产品纳入优惠核心,通义千问主力模型直降97%,GPU实例低至1.5折。本文从活动基础信息、核心优惠政策
279 3
|
存储 Prometheus 监控
高可用prometheus集群方案选型分享
高可用prometheus集群方案选型分享
7783 2
高可用prometheus集群方案选型分享
|
安全 数据安全/隐私保护
什么是受 DRM 保护的内容以及如何删除 DRM 保护
当涉及到数字媒体世界中的内容时,您当然需要借助 DRM(数字版权管理)技术来确保您的创作或内容的安全和保护。让我们简要了解一下什么是受 DRM 保护的内容以及如何删除 DRM 保护。
|
SQL 关系型数据库 数据库连接
|
10月前
|
人工智能 搜索推荐 算法
抖音电商 API 开启抖音小店私域流量运营新征程
在数字经济浪潮下,抖音电商API为中小商家开启私域流量运营新机遇。本文解析API如何助力自动化管理、精准营销与生态协同,推动高效智能运营。
|
11月前
|
人工智能 弹性计算 API
再不玩通义 VACE 模型你就过时了!一个模型搞定所有视频任务
介绍通义的开源模型在 ecs 或 acs 场景如何一键部署和使用,如何解决不同视频生成场景的问题。
|
10月前
|
存储 关系型数据库 MySQL
使用命令行cmd查询MySQL表结构信息技巧分享。
掌握了这些命令和技巧,您就能快速并有效地从命令行中查询MySQL表的结构信息,进而支持数据库维护、架构审查和优化等工作。
826 9
|
机器学习/深度学习 Python
【10月更文挑战第5天】「Mac上学Python 6」入门篇6 - 安装与使用Anaconda
本篇将详细介绍如何在Mac系统上安装和配置Anaconda,如何创建虚拟环境,并学习如何使用 `pip` 和 `conda` 管理Python包,直到成功运行第一个Python程序。通过本篇,您将学会如何高效地使用Anaconda创建和管理虚拟环境,并使用Python开发。
627 4
【10月更文挑战第5天】「Mac上学Python 6」入门篇6 - 安装与使用Anaconda
|
人工智能 容灾 Serverless
AI推理新纪元,PAI全球化模型推理服务的创新与实践
本次分享主题为“AI推理新纪元,PAI全球化模型推理服务的创新与实践”,由阿里云高级产品经理李林杨主讲。内容涵盖生成式AI时代推理服务的变化与挑战、play IM核心引擎的优势及ES专属网关的应用。通过LM智能路由、多模态异步生成等技术,PAI平台实现了30%以上的成本降低和显著性能提升,确保全球客户的业务稳定运行并支持异地容灾,目前已覆盖16个地域,拥有10万张显卡的推理集群。
|
监控 安全 数据挖掘
运营分析常用指标总结:
运营分析常用指标总结:
845 0