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, "账户名或密码都输错了,老六再输一遍!!");
            }

    }
}
相关文章
|
5月前
|
小程序 JavaScript
微信小程序向左滑动删除操作(类仿微信、QQ)
微信小程序向左滑动删除操作(类仿微信、QQ)
43 0
|
4月前
|
Java 定位技术 Android开发
【Android App】集成腾讯地图显示位置和地图面板讲解及实战(附源码和演示 超详细必看)
【Android App】集成腾讯地图显示位置和地图面板讲解及实战(附源码和演示 超详细必看)
84 1
|
11月前
|
数据安全/隐私保护 C语言 Python
Python高级进阶教程021期 pyqt5label控件进阶使用,设置兄弟控件,广告植入
Python高级进阶教程021期 pyqt5label控件进阶使用,设置兄弟控件,广告植入
|
11月前
|
数据安全/隐私保护 索引
零基础VB教程050期:QQ2018登录界面动画开发
零基础VB教程050期:QQ2018登录界面动画开发
|
JSON 小程序 JavaScript
走进小程序【四】小程序自定义Component如何使用,手把手封装一个底部Tabbar栏
走进小程序【四】小程序自定义Component如何使用,手把手封装一个底部Tabbar栏
167 0
走进小程序【四】小程序自定义Component如何使用,手把手封装一个底部Tabbar栏
|
自然语言处理 算法 Java
Java实现简单的在聊天面板中显示emoji
Java实现简单的在聊天面板中显示emoji
303 0
Java实现简单的在聊天面板中显示emoji
|
Java
编写Java程序,使用Swing布局管理器和常用控件,实现仿QQ登录界面
编写Java程序,使用Swing布局管理器和常用控件,实现仿QQ登录界面
236 0
编写Java程序,使用Swing布局管理器和常用控件,实现仿QQ登录界面
|
容器
swing用布局管理实现QQ登录界面 2.0(以及swing控件的一些基本的设置、鼠标事件等等花样的总结)
swing用布局管理实现QQ登录界面 2.0(以及swing控件的一些基本的设置、鼠标事件等等花样的总结)
180 0
swing用布局管理实现QQ登录界面 2.0(以及swing控件的一些基本的设置、鼠标事件等等花样的总结)
|
数据安全/隐私保护
pyqt5 登录界面的实现模板(加强版2)
本例,在[登录界面第二版](https://yq.aliyun.com/articles/653646)的基础上,增加了登录界面的记住密码功能和自动登录功能。 在实现这两个功能的时候,需要用到QSettings这个知识点。QSettings用起来还是很方便,很简单的,不细说了,直接看代码吧。
2473 0
|
前端开发 C# 数据安全/隐私保护
C# WPF MVVM QQ密码管家项目(8,完结篇:自动输入QQ号、密码)
原文:C# WPF MVVM QQ密码管家项目(8,完结篇:自动输入QQ号、密码) 目录: 1,界面设计 2,数据模型的建立与数据绑定 3,添加QQ数据 4,修改QQ数据 5,删除QQ数据 6,密码选择输入界面数据绑定 7,对QQ登录界面的自动输入思路分析 8,完结篇:自动输入QQ号、密码   接上篇,获取QQ登录界面句柄、窗口位置、鼠标/键盘操作等都需要用到win32api win32api是windows系统预留的接口,通过接口我们可以实现对系统更加深度地操作。
1651 0