JAVA实现简单的登录界面_登录页面java-程序员宅基地

技术标签: JAVA  登录界面  

我本来是学C++的,然后课程上老师要求做一个登陆界面,用C++实现不限时,然后就选择了JAVA,从零开始自学JAVA。好在网上很多大佬都写了如何用JAVA编写登陆界面的博客,写得很详细,使得我第一次接触JAVA也能看懂一二。

比较推荐这篇,博主真的很细心,我主要也是参考的这篇文章(分为一、二两篇):

https://blog.csdn.net/Alexwym/article/details/80711015?utm_source=blogxgwz3

参考了众多文章之后,我终于达到了自己的目标,实现了一个简单的登录界面,功能包括:正常登录(只能登录设定好的账号和密码)、账号密码错误提示、错误三次提示锁定(仅仅是提示,锁定没做)。下面讲讲怎么实现吧。

程序分为两个部分,登录界面和登录后转跳的界面。

首先是登录界面:

首先是awt:

import java.awt.Dimension;  //封装了一个构件的高度和宽度
import java.awt.FlowLayout;  //流式布局,解决组件相互覆盖问题
import java.awt.Font;  //字体

然后是swing,也就是我们做窗口需要的组件:

import javax.swing.JFrame;  //窗体容器组件类(属于顶级容器)
import javax.swing.JLabel;  //标签
import javax.swing.JTextField;  //文本输入框元素组件类
import javax.swing.JPasswordField;  //密码输入框组件类
import javax.swing.JButton;  //按键组件类

我们的思路是,定义一个初始化界面函数,在main函数中调用。这里初始化函数我命名为initUI。在函数中我们需要对窗体和各部分组件进行定义。

首先是窗体,需要定义的属性有:窗体的标题、窗体的大小、窗体的关闭方式、窗体的显示位置、字体、流式布局、是否能够修改窗体大小以及窗体是否可见。

然后是各组件,各组件的设置都大同小异,主要是显示内容、大小、字体,最重要的一步是要把组件添加到窗体上去。详情请看代码和注释。

package test;

import java.awt.Dimension;  //封装了一个构件的高度和宽度
import java.awt.FlowLayout;
import java.awt.Font;

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

public class Login {

	//在类中定义主函数
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//在主函数中,实例化Login类的对象,调用初始化界面的方法
		Login login = new Login();
		login.initUI();

	}
	
	//在类中定义初始化界面的方法
	public void initUI() {
		//在initUI中实例化JFrame类的对象
		JFrame frame = new JFrame();
		//设置窗体对象的属性值
		frame.setTitle("Login");//设置窗体标题
		frame.setSize(400, 250);//设置窗体大小,只对顶层容器生效
		frame.setDefaultCloseOperation(3);//设置窗体关闭操作,3表示关闭窗体退出程序
		frame.setLocationRelativeTo(null);//设置窗体相对于另一组间的居中位置,参数null表示窗体相对于屏幕的中央位置
		frame.setResizable(false);//禁止调整窗体大小
		frame.setFont(new Font("宋体",Font.PLAIN,14));//设置字体,显示格式正常,大小
		
		//实例化FlowLayout流式布局类的对象,指定对齐方式为居中对齐组件之间的间隔为10个像素
		FlowLayout fl = new FlowLayout(FlowLayout.CENTER,10,10);
		//实例化流式布局类的对象
		frame.setLayout(fl);
		
		//实例化JLabel标签对象,该对象显示“账号”
		JLabel labname = new JLabel("账号:");
		labname.setFont(new Font("宋体",Font.PLAIN,14));
		//将labname标签添加到窗体上
		frame.add(labname);
		
		//实例化JTextField标签对象化
		JTextField text_name = new JTextField();
		Dimension dim1 = new Dimension(300,30);
		text_name.setPreferredSize(dim1);//设置除顶级容器组件以外其他组件的大小
		//将textName标签添加到窗体上
		frame.add(text_name);
		
		//实例化JLabel标签对象,该对象显示“密码”
		JLabel labpass = new JLabel("密码:");
		labpass.setFont(new Font("宋体",Font.PLAIN,14));
		//将labpass添加到窗体上
		frame.add(labpass);
		
		//实例化JPasswordField
		JPasswordField text_password = new JPasswordField();
		//设置大小
		text_password.setPreferredSize(dim1);
		//添加到窗体
		frame.add(text_password);
		
		//实例化JButton组件
		JButton button1 = new JButton();
		//设置按键的显示内容
		Dimension dim2 = new Dimension(100,30);
		button1.setText("登录");
		button1.setFont(new Font("宋体",Font.PLAIN,14));
		//设置按键大小
		button1.setSize(dim2);
		frame.add(button1);
		
		frame.setVisible(true);//窗体可见,一定要放在所有组件加入窗体后
		
		LoginListener ll = new LoginListener(frame,text_name,text_password);
		button1.addActionListener(ll);
	}
}

界面实现的结果如下:


接下来是第二部分,也就是按键监听。

我们在输入账号密码后,如果账号密码匹配,则显示登录成功的界面,否则显示账号或密码错误,并提示剩余次数。当剩余次数用尽后,会显示账号已锁定(但是并没有实现锁定功能),同时关闭窗口。

整体思路如下:

1.首先对登录按键设置监听,判断是否被按下。

2.若被按下,则获取账号和密码输入框内的内容,并用if语句进行判断,同时新建一个窗体备用。

3.若账号密码匹配,则在新建窗体上建立标签显示登录成功;如果不匹配,则判断剩余次数,剩余次数大于0的时候显示还可输入的次数,并有返回登录界面的按键(这里注意,我们的登录界面不能先关闭);剩余次数为0,则显示账号锁定,以及关闭窗体的按键。

还是按顺序来,首先是awt:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Font;

跟登录界面的大同小异,主要增加了监听的软件包。

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;

接下来是组件,增加了JPanel,这是一个容器,把其他组件加入到它里面然后再对它进行排版。为什么要增加这个组件呢?因为我在做这个部分的时候遇到了一个问题,就是我在一个窗口里同时添加了一个标签和一个按键,但是展示结果却是按键填充了整个窗口界面,标签被按键覆盖,调整了按键大小也没有作用,最后查得可以使用JPanel这个组件来解决组件之间相互覆盖的问题。

下面是代码,窗体创建部分跟上个部分大同小异,关键在于文本框内容的获取、账号密码的匹配、监听的设置和监听后的操作。

package test;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Font;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class LoginListener implements ActionListener{
	private javax.swing.JTextField text_name;
	private javax.swing.JPasswordField text_password;
	private javax.swing.JFrame login;
	
	public LoginListener(javax.swing.JFrame login,javax.swing.JTextField text_name,javax.swing.JPasswordField text_password)
	{//获取登录界面、账号密码输入框对象
		this.login=login;
		this.text_name=text_name;
		this.text_password=text_password;
	}
	
	int i=3;//3次登录机会
	
	public void actionPerformed(ActionEvent e)
	{
		Dimension dim2 = new Dimension(100,30);
		Dimension dim3 = new Dimension(300,30);
		
		//生成新界面
		javax.swing.JFrame login2 = new javax.swing.JFrame();
		login2.setSize(400,200);
		login2.setDefaultCloseOperation(3);
		login2.setLocationRelativeTo(null);
		login2.setFont(new Font("宋体",Font.PLAIN,14));  //宋体,正常风格,14号字体
		//创建组件
		javax.swing.JPanel jp1 = new JPanel();
		javax.swing.JPanel jp2 = new JPanel();

			if(text_name.getText().equals("vv") && text_password.getText().equals("123456"))
			{	
				JLabel message = new JLabel("登陆成功!");
				message.setFont(new Font("宋体",Font.PLAIN,14));  //宋体,正常风格,14号字体
				message.setPreferredSize(dim3);
				jp1.add(message);
				login2.add(jp1,BorderLayout.CENTER);
				
				login2.setResizable(false);
				login2.setVisible(true);
				
				//通过我们获取的登录界面对象,用dispose方法关闭它
				login.dispose();
			}
			
			else if(i>=2)
			{
				JLabel message = new JLabel("账号或密码错误,您今天还有"+(i-1)+"次机会");
				message.setFont(new Font("宋体",Font.PLAIN,14));  //宋体,正常风格,14号字体
				message.setPreferredSize(dim3);
				//将textName标签添加到窗体上
				jp1.add(message);
				login2.add(jp1,BorderLayout.CENTER);
				
				JButton close = new JButton("确定");
				close.setFont(new Font("宋体",Font.PLAIN,14));
				//设置按键大小
				close.setSize(dim3);
				jp2.add(close);
				login2.add(jp2,BorderLayout.SOUTH);
				
				i--;//次数减少
				close.addActionListener(new ActionListener()
				{
					public void actionPerformed(ActionEvent e)
					{
						login2.dispose();
					}
				});
				
				login2.setResizable(false);
				login2.setVisible(true);
			}
			
			else if(i == 1)
			{
				JLabel message = new JLabel("账号已锁定,请明天再试");
				message.setFont(new Font("宋体",Font.PLAIN,14));  //宋体,正常风格,14号字体
				message.setPreferredSize(dim3);
				//将textName标签添加到窗体上
				jp1.add(message);
				login2.add(jp1,BorderLayout.CENTER);
				
				JButton close = new JButton("确定");
				close.setFont(new Font("宋体",Font.PLAIN,14));
				//设置按键大小
				close.setSize(dim3);
				jp2.add(close);
				login2.add(jp2,BorderLayout.SOUTH);
				
				close.addActionListener(new ActionListener()
				{
					public void actionPerformed(ActionEvent e)
					{
						login2.dispose();
					}
				});
				
				login2.setResizable(false);
				login2.setVisible(true);
				
				//通过我们获取的登录界面对象,用dispose方法关闭它
				login.dispose();
			}
	}
}

运行结果如下:

首先是登录成功(这里还有个问题我没解决,就是标签不知道如何才能让它居中。。。)

然后是错误一次,点击确定后返回登录界面:

最后是错误三次,点击确定后关闭所有界面:

大致上就是这样,程序还不是很完善,还有很多待提高的地方。新人第一次写,如果有错误,请大佬们指出,谢谢各位大佬了。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hnu1601/article/details/83385558

智能推荐

Android开发之反射与注解_反射怎么获取无参方法-程序员宅基地

文章浏览阅读9.8k次,点赞2次,收藏9次。作为Android开发者,反射与注解是我们的必需品_反射怎么获取无参方法

Arthas入门使用 idea的 Alibaba Cloud Toolkit 插件_arthas cloud toolkit-程序员宅基地

文章浏览阅读795次。1. 上传arthas-boot.jar到linux的/sino文件夹下2.将你的springboot项目部署到 /sino下并启动3. java -jar arthas-boot.jar 你的springboot项目的pid4. 推荐使用idea的 Alibaba Cloud Toolkit 插件(不仅替代Xshell ) , 主要是内置了arthas-boot.jar , 现已公测, 后面加钉钉群号(34965379)跟进.[arthas@1460]$ jvm RUN.._arthas cloud toolkit

图片拼图模板软件哪个好?这些软件让你尽情挥洒创意-程序员宅基地

文章浏览阅读389次,点赞7次,收藏9次。不管大家是想制作简单的横向、纵向的拼图,还是复杂的“照片墙”拼图、海报拼图等,它都可以让大家在这里找到心仪的拼图模板。就拿“网格拼图”功能来说,它提供了多种图片样式的调节选项,涵盖了各个小拼图之间的间距大小、图片边框的宽度大小,甚至连图片边角的圆润程度都可以调节哦~同时它的图片处理速度非常快,即使大家要进行多达二十几张照片的拼图操作,它在上传图片的过程中,也不会有卡顿或延迟的现象出现,非常的稳定。不管大家是制作相册纪念、明信片,还是分享到朋友圈的照片拼贴,它都能够为大家提供合适的模板,满足各自的拼图需求。

小白零基础快速入门Java —— 第七课:常用API-程序员宅基地

文章浏览阅读25次。小白零基础快速入门Java ——第七课:常用API。本文介绍了以下内容:1、API和包。 2、String。 3、ArrayList。4、Object类。5、Objects。6、包装类。7、StringBuilder、StringBuffer。8、StringJoiner。9、Math、System、Runtime。10、BigDcimal 。11、JDK8之前传统的日期、时间。12、JSK8开始新增的日期、时间。13、Arrays。

form表单的基本使用_form rel属性实现-程序员宅基地

文章浏览阅读132次。文章目录form的基本属性actiontargetmethodenctypeform的基本属性actionaction 规定发送表单时,向何处发送数据action属性值应该是后端提供的一个URL地址,这个URL地址专门负责接收表单提交过来的数据当form表单在未指定action属性的情况西下,action的默认值未当前页面的URL地址注意:当提交表单后,页面则会立即跳转action属性指定的UTRL地址targettarget在何处打开页面它有五个值,默认情况下值未_self,表_form rel属性实现

随便推点

Golang中WebSocket和WSS的支持_golang wss-程序员宅基地

文章浏览阅读1.2k次。本文介绍了Golang中WebSocket和WSS的支持。我们首先了解了WebSocket和WSS的基本概念和特点,然后演示了如何使用Golang构建WebSocket服务器和客户端,并使用自签名证书实现WSS的功能。通过实际的代码示例,我们展示了Golang中WebSocket和WSS的强大功能和简洁易用的特点。希望本文对你理解和使用Golang中WebSocket和WSS提供了一些帮助!_golang wss

理解DDoS防护本质:基于资源较量和规则过滤的智能化系统-程序员宅基地

文章浏览阅读289次。本文由 网易云 发布。 随着互联网生态逐渐形成,DDoS防护已经成为互联网企业的刚需要求,网易云安全(易盾)工程师根据DDoS的方方面面,全面总结DDoS的攻防对抗。 1、什么是DDoS DDoS全称Distributed Denial of Service,中文意思为“分布式拒绝服务”,就是利用大量合法的分布式服务器对目标发送请求,从而导致正常合法用户无法获得服务。通俗..._布隆过滤器 ddos

cv2.imread()、cv2.imshow()、cv2.imwrite()_c# cv2.imwrite()-程序员宅基地

文章浏览阅读6k次。1. read an imagecv2.imread()cv2.IMREAD_COLORcv2.IMREAD_GRAYSCALECV2.IMREAD.UNCHANGED2. code这里写代码片_c# cv2.imwrite()

Fluent16.0学习笔记(二)————边界条件_fluent将一个case出口边界设置为另一个case的入口边界-程序员宅基地

文章浏览阅读1.6w次,点赞24次,收藏134次。边界条件定义边界条件1、什么是边界条件2、流体域如何设置边界条件定义边界条件1、什么是边界条件要有确定的一个有唯一解的物理问题,必须指定边界上流场变量。解释:大多数来做ansys仿真无非就是分析空间内部的状态(比如某装配零件,装配好后,其内部的结构的受力分析,需要弄清楚哪一部分受力较大或较小等等),或者当某个条件改变的时候,状态的变化情况(我做的就这个,比如给一个密闭空间通入气体,气体内部空间的变化情况)。比如向密闭空间注入气体,注入气体的入口就算边界条件。定义一个边界条件主要包括:1)位置_fluent将一个case出口边界设置为另一个case的入口边界

python面向对象详解(上)_python面向对象如何操作 m.blog.csdn.net-程序员宅基地

文章浏览阅读1.3k次。创建类Python 类使用 class 关键字来创建。简单的类的声明可以是关键字后紧跟类名:class ClassName(bases): 'class documentation string' #'类文档字符串' class_suite #类体实例化通过类名后跟一对圆括号实例化一个类 mc = MyClass() # instantiate class 初始化类‘int_python面向对象如何操作 m.blog.csdn.net

EXPORT EXPERIENCES(ENGLISH WORDS PERFECT!! SUCCESSFULL OPERATION!!!)-程序员宅基地

文章浏览阅读1k次。 0: Main itemPlease log in. Thank you for browsing our website, and this is only open to our old customers and very potential customer in order to provide better service and protect customers an_export experience

推荐文章

热门文章

相关标签