Java仿QQ界面及事件与接口

这篇博客介绍了如何使用Java Swing库创建QQ登录界面,包括组件选择、设计思路、代码实现和事件处理。通过使用JFrame、JLabel、JButton等组件,结合FlowLayout布局,实现了登录界面的布局。同时,通过实现ActionListener接口,添加事件监听,实现了登录验证功能。当账号密码匹配时,登录成功;否则,显示错误提示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.登录界面所需要的API类:

(1)组件类(javax.swing.):

顶级容器:JFrame 

图片:ImageIcon 

标签:JLable 

按钮:JButton

输入框:JTextField 

复选框:JCheckBox

密码输入框:JPasswordField

(2)元素类(java.awt.)

尺寸:Dimension

流式布局器:FlowLayout(从左到右摆放组件,直到占据一行所有的空间再移动下一行。默认情况下,组件在每一行都居中排列)

 

2.设计思路:

qq登录界面上半部分可用一张图片,图片不可直接放在顶级容器上,应先放在标签上,而后将标签放入顶级容器。而下半部分大体是帐号密码标签及其文本框。再往下则是自动登录、记住密码标签及其复选框,以及忘记密码和登录按钮。

 

3.代码实现:



import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Insets;
import java.awt.Color;


public class QQUI {
	public static void main(String []args){
		QQUI login = new QQUI();
		login.Show_loginUI();
	}
	public void Show_loginUI(){
		//实例化顶级容器JFrame(窗体框架)
		JFrame qq_login = new JFrame();
		//设置标题
		qq_login.setTitle("QQ");
		//设置尺寸
		qq_login.setSize(426,330);
		//设置背景色
		qq_login.setBackground(Color.blue);//设置了JFrame的背景色,但直接看到并不是JFrame,而是ContentPane
		qq_login.getContentPane().setBackground(Color.white);
		qq_login.getContentPane().setVisible(true);//如果改为false那么就变成了蓝色。
		//设置程序关闭,3=JFrame.EXIT_ON_CLOSE
		qq_login.setDefaultCloseOperation(3);
		
		//实例化流式布局
		FlowLayout qq_FL = new FlowLayout();
		//设置布局器
		qq_login.setLayout(qq_FL);
		
		//添加背景图片 
		//相对路径与src同级的目录Image 所以使用./访问
		ImageIcon qq_login_image = new ImageIcon("./Image/login.png");
		//将图片添加到标签上
		JLabel qq_login_image_label = new JLabel(qq_login_image);
		
		//添加帐号密码标签
		JLabel UID_label = new JLabel("帐号:");
		JLabel PWD_label = new JLabel("密码:");
		
		//添加帐号密码输入框
		JTextField UID_text = new JTextField();
		JPasswordField PWD_text = new JPasswordField();
		
		//输入框尺寸设置
		Dimension text = new Dimension(340,30);
		UID_text.setPreferredSize(text);
		PWD_text.setPreferredSize(text);
		
		//添加按钮
		JButton login_check = new JButton("登录");
		JButton pwd_retrieve = new JButton("找回密码");
		
		//透明化“找回密码”按钮
		Insets around = new Insets(0,0,0,0);
		pwd_retrieve.setMargin(around);//将边框外的上左下右空间设置为0
		pwd_retrieve.setIconTextGap(0);//将标签中显示的文本和图标之间的间隔量设置为0
		pwd_retrieve.setBorderPainted(false);//不打印最外边框 
		pwd_retrieve.setBorder(null);//除去边框 
//		pwd_retrieve.setText(null);//除去按钮上文字
		pwd_retrieve.setFocusPainted(false);//除去焦点的框 
		pwd_retrieve.setContentAreaFilled(false);//除去默认的背景填充
		
		//修改“登录”按钮
		login_check.setBackground(new Color(7,186,253));
		login_check.setBorderPainted(false);
		login_check.setForeground(Color.white);//字体颜色
		Dimension login_button_size = new Dimension(235,35);
		login_check.setPreferredSize(login_button_size);
		login_check.setFont( new Font("黑体",Font.BOLD,16));//此方法将使应用程序加载变慢
		
		//添加复选框
		JCheckBox login_automatically = new JCheckBox();
		JCheckBox pwd_remember = new JCheckBox();
		
		//添加复选框相应标签
		JLabel login_auto_label = new JLabel("自动登录");
		JLabel pwd_remember_label = new JLabel("记住密码");
		
		//添加空白标签
		JLabel blank_1 = new JLabel(" ");
		Dimension blank_1_dimension = new Dimension(60,30);
		blank_1.setPreferredSize(blank_1_dimension);
		
		JLabel blank_2 = new JLabel(" ");
		Dimension blank_2_dimension = new Dimension(58,30);
		blank_2.setPreferredSize(blank_2_dimension);
		
		//将组件及元素添加至窗体
		qq_login.add(qq_login_image_label);
		qq_login.add(UID_label);
		qq_login.add(UID_text);
		qq_login.add(PWD_label);
		qq_login.add(PWD_text);
		qq_login.add(blank_1);
		qq_login.add(login_automatically);
		qq_login.add(login_auto_label);
		qq_login.add(pwd_remember);
		qq_login.add(pwd_remember_label);
		qq_login.add(pwd_retrieve);
		qq_login.add(blank_2);
		qq_login.add(login_check);
		
		//显示
		qq_login.setVisible(true);
	}
}

 

4.事件与接口的加入:

(1)自定义一个 监听器类 去 implements ActionListener 接口

(2)在监听器类中定义  文本输入框的属性,用以传参,获得输入框中文本

(3)重写动作监听器中的抽象方法(双击动作监听器ActionListener,然后按F3键,将其方法复制到自定义类中进行重写)

(4)输入框对象.getText(); 取到字符串

(5)"".equals() 比较字符串  验证登录

import javax.swing.JTextField;
import javax.swing.JPasswordField;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class Login_listener implements ActionListener {
	JTextField UID;
	JTextField PWD;
	public void actionPerformed(ActionEvent e){
	if (UID.getText().equals("10001")&&PWD.getText().equals("MHT")){
		System.out.println(UID.getText()+"登录成功");
		
	}
	else{
		System.out.println(UID.getText()+"帐号或密码错误");
	}
}


	}

(6)给组件添加动作监听器 addActionListener(实现了动作监听器接口的类的对象);

(7)在界面类中用监听器的对象调用输入框属性 =  输入框对象 //赋值

        //给“登录”按钮添加监听器 (1)实例化实现了(ActionListener)接口的类的对象(2)添加对象(3)传参
		Login_listener loginlistener = new Login_listener();
		login_check.addActionListener(loginlistener);
		loginlistener.UID = UID_text;
		loginlistener.PWD = PWD_text;
		
		QQ_PWD_retrieve pwd_retrieve_listener = new QQ_PWD_retrieve();
		pwd_retrieve.addActionListener(pwd_retrieve_listener);
		pwd_retrieve_listener.UID = UID_text;

 

此外,还对界面进行了小小的修改

(1)将窗体大小固定

(2)将窗体位置固定

		//设置窗体居中
		qq_login.setLocationRelativeTo(null);
		//设置窗体大小不可改变
		qq_login.setResizable(false);

 

5.效果演示:

界面出现在屏幕正中间,整体与qq界面相似

帐号与密码匹配则登录成功

帐号与密码不匹配则显示错误

点击“找回密码”则显示申请找回密码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值