JAVA实现QQ登录注册修改密码等功能(美化版)
Posted 每天都要努力的小颓废呀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA实现QQ登录注册修改密码等功能(美化版)相关的知识,希望对你有一定的参考价值。
本专栏将从基础开始,循序渐进,由浅入深讲解Java的基本使用,希望大家都能够从中有所收获,也请大家多多支持。
专栏地址:26天高效学习Java编程
相关软件地址:软件地址
所有代码地址:代码地址
如果文章知识点有错误的地方,请指正!大家一起学习,一起进步。
文章目录
大家好,今天用Java的awt组件、swing组件以及数据库JDBC写了一个仿QQ登录的界面,具体演示如下图所示,包括三个页面,分别是登录窗口(MainFrame)、注册窗口(RegisterUI)和忘记密码窗口(ForgetUI)。本文主要应用的技术有:JAVA-GUI、JAVA的awt组件、swing组件、事件处理、JDBC等,是初学者学习和练手的好项目。准备好了吗,let’s get it!
项目结构及结果展示
该项目的结构如下图所示:
主要有三个类:
- MainFrame是登录窗口的GUI类,效果图如下:
- RegisterUI是注册窗口的GUI类,效果图如下:
- ForgetUI是忘记密码窗口的GUI类,效果图如下:
代码展示
在进行代码展示前,先对Swing组件常见的控件类进行介绍,Swing组件常见的控件类有以下几种:
JLabel 标签主要用于展示 文本 或 图片,也可以 同时显示文本和图片
JButton 点击事件
JTextArea 编辑单行的文本框
JPasswordArea 一个只能输入数字的密码框 把输入的内容用其他字符回显
JTabledPlan 选项卡面板。它允许用户通过点击给定标题或图标的选项卡,在一组组件之间进行切换显示
JCheckBox 复选框,是否被选中
JPanel相当于将整个窗体划分成几个面板,然后在面板中使用布局管理器(管理按钮的布局)一个窗口只能有一个JFrame,能有多个JPlanel
Imagin.SCALE_DEFAULT 自适应JLabel的大小
getScaledInstance 创建此图像的缩放版本。返回一个新的 image 对象,默认情况下,该对象按指定的 width 和 height 呈现图像。即使已经完全加载了初始源图像,新的 image 对象也可以被异步加载
SetIcon图标将会被自动地放到按钮的上面,缺省时居中放置
setborderpainted 如果进度条应该绘制边框,则为 true;否则为 false
MainFrame模块
MainFrame的布局如下图所示:
MainFrame的代码如下:
package Frame;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class MainFrame extends JFrame implements ActionListener, FocusListener
private static final long serialVersionUID = 1L;
private static final String _txt_account = "QQ密码/手机/邮箱";
private static final String _txt_pwd = "密码";
private static final String _txt_title = "QQ登录";
private static final String _txt_registe = "注册";
private static final String _txt_forget = "忘记密码";
private static final String _txt_blank = "";
private JTextField account;
private JPasswordField pwd;
private JLabel upper_frame;
private JPanel lower_frame, center_frame;
private JButton login, register, forget;
MainFrame()
//控件的初始化
init();
add(upper_frame, BorderLayout.NORTH);
add(center_frame, BorderLayout.CENTER);
add(lower_frame, BorderLayout.SOUTH);
ImageIcon logo = new ImageIcon("D:/image/logo.jpg"); //左上方小图标
setIconImage(logo.getImage());
setBounds(500, 230, 430, 360); //设定大小及位置
setResizable(false); //登录框大小固定,不允许通过拖、拉改变大小
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); //设置窗口右上角的叉号,点击叉号窗口关闭 注意不能EXIT_ON_CLOSE做参数的,用它时候使用的是System.exit方法退出应用程序。故会关闭所有窗口。
setTitle(_txt_title);
setVisible(true); //说明数据模型已经构造好了,允许JVM可以根据数据模型执行paint方法开始画图并显示到屏幕上,一般放在最后一句
public void init()
//账号输入块
account = new JTextField(_txt_account);
account.setName("account");
account.setForeground(Color.gray);
account.addFocusListener(this); //产生事件响应用户行为
//密码输入块
pwd = new JPasswordField(_txt_pwd);
pwd.setName("pwd");
pwd.setForeground(Color.gray);
pwd.setEchoChar('\\0'); //启动后密码框内一定为 “密码”
pwd.addFocusListener(this);
//注册模块
register = new JButton(_txt_registe);
register.setBorderPainted(false);
register.setBorder(BorderFactory.createRaisedBevelBorder()); //斜面边框(凸)
register.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
register.addActionListener(this);
//忘记密码模块
forget = new JButton(_txt_forget);
forget.setBorderPainted(false);
forget.setBorder(BorderFactory.createRaisedBevelBorder());
forget.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
forget.addActionListener(this);
//login按钮模块
login = new JButton();
ImageIcon login_image = new ImageIcon("D:/image/login_image.png");
login_image.setImage(login_image.getImage().getScaledInstance(430, 35, Image.SCALE_DEFAULT));
login.setIcon(login_image);
login.setBackground(Color.white);
login.setBorderPainted(false); //如果进度条应该绘制边框,则为 true;否则为 false
login.setBorder(null); //设置此组件的边框 无
login.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); //将光标设为 “小手”形状
login.addActionListener(this);
//qq登录框架上半部分(无按钮之类的内容,只有一张图片)
ImageIcon upper_image = new ImageIcon("D:/image/upper_image.png");
upper_image.setImage(upper_image.getImage().getScaledInstance(430, 160, Image.SCALE_DEFAULT));
upper_frame = new JLabel(upper_image);
//qq登录中间部分 (账号、密码、 注册、forget)
center_frame = new JPanel();
center_frame.setName("center_frame");
center_frame.setLayout(null);
center_frame.setLayout(new GridLayout(3, 3, 3, 15)); //这里用到3行3列的空间, 用空格填充
center_frame.add(new JLabel(_txt_blank, JLabel.CENTER));
center_frame.add(account);
center_frame.add(new JLabel(_txt_blank, JLabel.CENTER));
center_frame.add(new JLabel(_txt_blank, JLabel.CENTER));
center_frame.add(pwd);
center_frame.add(new JLabel(_txt_blank, JLabel.CENTER));
center_frame.add(register);
center_frame.add(new JLabel(_txt_blank, JLabel.CENTER));
center_frame.add(forget);
center_frame.setBackground(Color.white);
//qq登录框架的下半部分login
lower_frame = new JPanel();
lower_frame.setName("lower_frame");
lower_frame.setLayout(null);
//lower_frame.setLayout(new GridLayout(1, 3, 3, 15));
lower_frame.setLayout(new GridLayout(0, 1));
lower_frame.add(login);
//按钮的点击事件用actionPerformed
@Override
public void actionPerformed(ActionEvent e)
/*
* 1:如果点击了登录按钮 首先判断帐号或者密码是否为空
* 2:如果点击了注册账号就弹出注册页面
* 3:如果点击了忘记密码弹出找回密码页面
*/
//处理登录(login)页面
if(e.getSource() == login)
String user_name = account.getText().trim();
String user_pwd = new String(pwd.getPassword()).trim();
if("".equals(user_name))
JOptionPane.showMessageDialog(null, "请输入帐号!!");
return;
if("".equals(user_pwd))
JOptionPane.showMessageDialog(null, "请输入密码!!");
return;
//处理注册(register)页面
if(e.getSource() == register)
RegisterUI registerUI = new RegisterUI(this);
//处理找回密码(forget)页面
if(e.getSource() == forget)
ForgetUI forgetUI = new ForgetUI(this);
//鼠标的点击或移动之类的用focuslistener
@Override
public void focusGained(FocusEvent e)
//处理账号输入框
if(e.getSource() == account)
if(_txt_account.equals(account.getText()))
account.setText("");
account.setForeground(Color.BLACK);
//处理密码输入框
if(e.getSource() == pwd)
if(_txt_pwd.equals(pwd.getText()))
pwd.setText("");
pwd.setEchoChar('*');
pwd.setForeground(Color.BLACK);
@Override
public void focusLost(FocusEvent e)
//处理账号输入框
if(e.getSource() == account)
if("".equals(account.getText()))
account.setForeground(Color.gray);
account.setText(_txt_account);
//处理密码输入框
if(e.getSource() == pwd)
if("".equals(pwd.getText()))
pwd.setForeground(Color.gray);
pwd.setText(_txt_pwd);
pwd.setEchoChar('\\0');
public static void main(String[] args)
MainFrame mainframe = new MainFrame();
RegisterUI模块
RegisterUI的布局和MainFrame的类似,如下图所示:
RegisterUI的代码如下:
package Frame;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class RegisterUI extends JFrame implements ActionListener, FocusListener
private static final long serialVersionUID = 1L;
private JLabel upper_N, user_name_txt, user_pwd_txt, user_ques_txt, user_ans_txt; //显示文字用
private JButton register_button_S;
private JTextField user_name, user_pwd, user_ques, user_ans; //在这里面获取用户输入
private JPanel tmp_South, center_Center;
private MainFrame mainFrame; //用于关闭登录页面 如果注册成功则将刚开始的注册页面关闭
public RegisterUI(MainFrame mainFrame)
this.mainFrame = mainFrame;
//初始化界面
init();
//合成整体
add(center_Center, BorderLayout.CENTER);
add(upper_N, BorderLayout.NORTH);
add(tmp_South, BorderLayout.SOUTH);
//位置、页面大小设置
setSize(250, 400);
setLocation(550, 300);
ImageIcon logo = new ImageIcon("D:/image/register_image.png"); //左上方小图标
setIconImage(logo.getImage());
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
setResizable(false);
setVisible(true);
public void init()
//上方图片部分构造 上 即为 北
ImageIcon upper_image = new ImageIcon("D:/image/register_background_image.jpg");
upper_image.setImage(upper_image.getImage().getScaledInstance(250, 139,
Image.SCALE_DEFAULT));
upper_N = new JLabel(upper_image);
//下方注册图片构造 下 即为 南
tmp_South = new JPanel(); //作为一个容器来放确认注册按钮
register_button_S = new JButton();
ImageIcon conform_register_image = new ImageIcon("D:/image/conform_register_image.png");
conform_register_image.setImage(conform_register_image.getImage().QQ登录的测试点(功能性测试登录界面性能安全性可用性兼容性)
java在线聊天项目1.2版 ——开启多个客户端,分别实现数据库注册和登录功能后,成功登陆则登录框消失,好友列表窗出现