JAVA—图形化“登录,注册”界面

前言:学习了一段时间JAVA的swing组件,心血来潮写了一个登录,注册界面。

           知道大伙喜欢美女,所以把用户登录界面背景设置成了beauty!

所用知识基本上都属于swing组件:

        javax.siwng.JFrame; //窗体类

        javax.swing.JButton; //按钮类

        javax.swing.JLabel; //标签类

        javax.swing.JTextField; //文本框类

        javax.swing.JPasswordField; //密码框类

        javax.swing.ImageIcon; //图标类

        集合ArrayList;

        MouseListener鼠标监听器;

        JOptionPane.showMessageDialog(Component parentComponent, Object message)方法

        该方法是弹出一个消息框,代码中使用了多次。效果如图:

 代码实现如下:

//  个人觉得main函数里面的内容越精简越好public class GameWin {public static void main(String[] args) {//创建了一个Register_LogIn类的对象register_logIn,并调用了空参构造Register_LogIn register_logIn=new Register_LogIn();        }}

看到这里还是一脸蒙吧,别急,往下看。

下面这个就是创建的Register_LogIn类,他的空参构造在下面也会详细讲解。

//需要用到的类
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Random;
//创建登录——注册类
public class Register_LogIn extends JFrame {//创建集合用来存放账户和密码信息。static ArrayList<String> users=new ArrayList<>();//下面的代码都在这个类里面
// //构造setCode方法来创建一个随机的验证码String setCode(){Random r=new Random();char[] c=new char[52];    //在数组中存放52个英文字母String result="";for (int i = 0; i < c.length; i++) {if(i<26){c[i]=(char)(65+i);//存放a~z} else {c[i]=(char)(97+i-26);//存放A~Z}}for (int i = 0; i < 4; i++) {int number=r.nextInt(c.length);result=result+c[number];}int figure=r.nextInt(10);result=result+figure;//将字符串变为数组char[] crr=result.toCharArray();char t;//将数组打乱for (int i = 0; i < crr.length; i++) {int rom=r.nextInt(5);t=crr[i];crr[i]=crr[rom];crr[rom]=t;}//得到验证码return String.valueOf(crr);}
 
//这里就是空参构造了,用来构建用户窗口public Register_LogIn(){//创建开始界面JFrame jFrame=new JFrame();jFrame.setTitle("用户登录界面");jFrame.setLocationRelativeTo(null);jFrame.setSize(800,480);jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jFrame.setLayout(null);//添加背景图片ImageIcon icon=new ImageIcon("D:\\壁纸\\small074417O9mVb1695253457.jpg");JLabel jLabel=new JLabel(icon);jLabel.setBounds(0,0,800,440);//设置界面元素JLabel account=new JLabel("账号");JLabel password=new JLabel("密码");JLabel code=new JLabel("验证码");JButton renew=new JButton(setCode());//将验证码的值赋给renew按钮renew.setText(setCode());JButton register=new JButton("注册");JButton logIn=new JButton("登录");//这三个是输入框,下面图片中灰色的框就是JTextField account_=new JTextField(80);JTextField password_=new JTextField(80);JTextField code_=new JTextField(70);//按钮的背景register.setIcon(new ImageIcon("C:\\Users\\21299\\Pictures\\Camera Roll\\1-图片\\imgs\\AE26B098-CB4C-46d5-A6D8-AAE4330AAFCB.png"));logIn.setIcon(new ImageIcon("C:\\Users\\21299\\Pictures\\Camera Roll\\1-图片\\imgs\\46B4E49A-7D7D-4dfb-916F-0881A4634E9A.png"));//设置位置register.setBounds(200,380,140,45);logIn.setBounds(450,380,140,45);renew.setBounds(410,340,90,30);account.setBounds(250,250,80,50);password.setBounds(250,290,80,50);code.setBounds(235,330,80,50);account_.setBounds(300,260,200,30);password_.setBounds(300,300,200,30);code_.setBounds(300,340,100,30);//设置按钮字体的颜色和字样account.setForeground(Color.GREEN);password.setForeground(Color.GREEN);code.setForeground(Color.GREEN);account.setFont(new Font("楷体",Font.BOLD,20));password.setFont(new Font("楷体",Font.BOLD,20));code.setFont(new Font("楷体",Font.BOLD,20));//输入框的颜色account_.setBackground(Color.lightGray);password_.setBackground(Color.lightGray);code_.setBackground(Color.lightGray);//将元素添加进窗口jFrame.add(account);jFrame.add(account_);jFrame.add(password);jFrame.add(password_);jFrame.add(code);jFrame.add(code_);jFrame.add(register);jFrame.add(logIn);jFrame.add(renew);jFrame.add(jLabel);jFrame.setVisible(true);//写到这里就可以呈现出下面的窗口画面(1)了

 图(1):

//给注册,登录按钮添加鼠标监听器register.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {super.mouseClicked(e);if(e.getButton()==1){//如果左键点击注册,跳转进Register窗口new Register();}}});logIn.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {super.mouseClicked(e);if(e.getButton()==1){if(account_.getText().isEmpty() ||password_.getText().isEmpty()){JOptionPane.showMessageDialog(null,"请输入完整信息再登录");} else if (!renew.getText().equals(code_.getText())) {JOptionPane.showMessageDialog(null,"验证码输入错误");} else{//输入的账户,密码是否正确的依据boolean flag = false;for(int i=0;i<users.size();i++){if(account_.getText().equals(users.get(i))&&password_.getText().equals(users.get(i+1))){flag=true;//如果无误,则truebreak;}}if(flag){JOptionPane.showMessageDialog(null,"登录成功!");}else{JOptionPane.showMessageDialog(null,"用户不存在");}}}}});
}
}

 下面是上面代码中写的登录时会出现的几种情况,运行出来如下:

下面的是注册账户和密码的窗口,登录的前提是创建的有,所以注册的处理也想当重要;

和上面的用户登录窗口大差小不差,所以我没有添加背景什么的,看上去就是一个简朴的窗口,有兴趣的话可以自己设置添加一些元素,让这个窗口看上去更好看。

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;public class Register extends JFrame {boolean flag;//flag为账户是否已经存在的标准public Register(){//注册界面的窗口设置this.setTitle("注册界面");this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);this.setSize(500,300);this.setLocationRelativeTo(null);this.setLayout(null);this.setVisible(true);//设置窗口元素JLabel account=new JLabel("注册账户");account.setBounds(50,50,100,50);account.setFont(new Font("楷体",Font.BOLD,20));JLabel password=new JLabel("注册密码");password.setBounds(50,100,100,50);password.setFont(new Font("楷体",Font.BOLD,20));JLabel nextpassword=new JLabel("再次输入密码");nextpassword.setBounds(50,150,150,50);nextpassword.setFont(new Font("楷体",Font.BOLD,20));JTextField account_=new JTextField(30);JTextField password_=new JTextField(30);JTextField nextpassword_=new JTextField(30);account_.setBounds(150,60,250,30);password_.setBounds(150,110,250,30);nextpassword_.setBounds(200,160,200,30);JButton jButton=new JButton("注册");jButton.setBounds(120,200,80,40);this.add(jButton);JButton jButton2=new JButton("退出");jButton2.setBounds(240,200,80,40);this.add(jButton2);//添加入窗口this.add(account);this.add(account_);this.add(password);this.add(password_);this.add(nextpassword);this.add(nextpassword_);//代码敲到这里就可以实现这个窗口的基本布局了,如下图(2)//给注册和退出添加鼠标监听器jButton.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {super.mouseClicked(e);if(e.getButton()==1){//for—each循环遍历,判断当前注册的账户是否已经存在for(String str:Register_LogIn.users){String accountStr=account_.getText();if(str.equals(accountStr)) {flag = true;break;}}if(!flag){//如果可以注册,接着判断是否为空if(account_.getText().isEmpty()||password_.getText().isEmpty()){JOptionPane.showMessageDialog(null,"账户或密码不能为空");}else{//判断两次密码是否一致String passwordStr=password_.getText();String nextpasswordStr=nextpassword_.getText();if(passwordStr.equals(nextpasswordStr)){//将账户和密码添加到集合中String accountStr=account_.getText();Register_LogIn.users.add(accountStr);Register_LogIn.users.add(passwordStr);JOptionPane.showMessageDialog(null,"注册成功");flag=false;}else{JOptionPane.showMessageDialog(null,"两次密码输入不一致");}}}else{JOptionPane.showMessageDialog(null, "该用户已存在!");}}}});jButton2.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {super.mouseClicked(e);if(e.getButton()==1){//点击按钮“退出”后关闭此界面dispose();}}});}
}

图(2):

 下面是代码中写的注册新账户时会出现的几种情况,运行出来如下:

写完这一切代码后,恭喜你,已经完成了图形化“登录,注册”界面!

如果各位老板有什么不懂或者比我方法更好的,欢迎在评论区留言~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/40183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++习题08-计算星期几

目录 一&#xff0c;问题 二&#xff0c;思路 三&#xff0c;代码 一&#xff0c;问题 二&#xff0c;思路 首先&#xff0c;需要注意到的是3^2000这个数值很大&#xff0c;已经远远超过了long long 数据类型能够表示的范围&#xff0c;如果想要使用指定的数据类型来保存…

14-18 2024 年影响企业 GenAI 的关键技术趋势

现在&#xff0c;大多数 .com 公司已于 2023 年更名为 .ai&#xff0c;那么价值万亿美元的问题是&#xff1a;接下来会发生什么&#xff1f;哪些关键障碍、工具、技术和方法将重塑格局 企业 AI 的不同之处在于&#xff0c;它专注于可衡量、可管理的输出&#xff0c;企业可以控…

前端Web开发HTML5+CSS3+移动web视频教程 Day4 CSS 第2天

P44 - P 四个知识点&#xff1a; 复合选择器 CSS特性 背景属性 显示模式 复合选择器 复合选择器仍然是选择器&#xff0c;只要是选择器&#xff0c;作用就是找标签。复合选择器就是把基础选择器进行组合使用。组合了之后就可以在大量的标签里面更快更精准地找标签了。找…

Qt中线程的使用

目录 1 .QThread重要信号和函数 1.1 常用共用成员函数 1.2信号和槽函数 1.3静态函数 1.4 任务处理函数 2.关于QThread的依附问题&#xff1a; 3.关于connect连接 4.QThread的使用 5.线程池QThreadPool 5.1. 线程池的原理 5.2&#xff0e;QRunable类 5.3. QThreadPoo…

安装维修制氮设备的注意指南

制氮设备在许多工业领域都发挥着重要作用&#xff0c;无论是确保生产过程中的氮气供应&#xff0c;还是维持设备的稳定运行&#xff0c;正确的安装和维修都是关键。以下是一些重要的注意事项&#xff0c;帮助您顺利完成制氮设备的安装与维修工作。 一、安装注意事项 (一)选址与…

VUE自定义新增、复制、删除dom元素

功能需求&#xff0c;能灵活新增或删除一个dom元素&#xff0c;在此dom元素中还存在能灵活新增、删除的dom元素。实现后功能图如下&#xff1a; 点击新增策略&#xff0c;能新增整个策略dom 实现思路&#xff1a;定义一个数量和一个数组&#xff0c;然后使用循环遍历展示内容&a…

将iStoreOS部署到VMware ESXi变成路由器

正文共&#xff1a;888 字 19 图&#xff0c;预估阅读时间&#xff1a;1 分钟 前面把iStoreOS部署到了VMware workstation上&#xff08;将iStoreOS部署到VMware Workstation&#xff09;。如果想把iStoreOS直接部署到ESXi上&#xff0c;你会发现转换镜像不能直接生成OVF或者OV…

css+js实现导航栏色块跟随滑动+点击后增加样式

这篇文章&#xff0c;我给大家分享一个导航菜单的效果。用cssJS实现&#xff0c;效果如图&#xff1a; 本例实现效果&#xff1a;当鼠标移动到其他菜单项时&#xff0c;会有个背景色块跟随鼠标横向平滑移动。当鼠标点击后&#xff0c;被点击的菜单名称文字字体会加粗。 现在&…

《数字图像处理与机器视觉》案例四 基于分水岭算法的粘连物体的分割与计数

一、引言 分水岭算法&#xff08;Watershed Algorithm&#xff09;&#xff0c;是一种基于拓扑理论的数学形态学的分割方法&#xff0c;其基本思想是把图像看作是测地学上的拓扑地貌&#xff0c;图像中每一点像素的灰度值表示该点的海拔高度&#xff0c;每一个局部极小值及其影…

SpringBoot 集成Swagger在线接口文档 接口注解

介绍 Swagger接口文档是一种自动生成、描述、调用和可视化的RESTful风格Web服务接口文档的工具。它通过一系列的规范和自动化工具&#xff0c;极大地简化了后端开发人员与前端开发人员之间的协作。 依赖 <!--swagger--> <dependency><groupId>io.springfo…

「媒体邀约」天津媒体资源?媒体邀约宣传报道

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体宣传加速季&#xff0c;100万补贴享不停&#xff0c;一手媒体资源&#xff0c;全国100城线下落地执行。详情请联系胡老师。 天津拥有丰富的媒体资源&#xff0c;利用这些资源进行有效…

ICMP协议详解及尝试用ping和tracert捕抓ICMP报文

一、ICMP协议 1.1、定义 ICMP&#xff08;Internet Control Message Protocol&#xff0c;互联网控制消息协议&#xff09;是一个支持IP层数据完整性的协议&#xff0c;主要用于在IP主机、路由器之间传递控制消息。这些控制消息用于报告IP数据报在传输过程中的错误&#xff0c…

C++ 语法

一、头文件与源文件 头文件用于声明函数,类似于java中service层的接口; 源文件用于实现头文件函数,相当于java中serviceImpl层的实现类; 定义接口 实现接口 使用接口 二、指针概述 定义与使用 定义一个指针p用于存a变量的内存地址,即指针就是地址; 解引用可以获取或修改…

40岁以上的中年人很难找到工作

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 你们有没有发现&#xff0c;90%的40岁以上的中年人&#xff0c;为了多挣钱&#xff0c;几乎除了吃饭和睡觉之外&#xff0c;都在拼命加班劳作&#xff0c;只要一停下来&#xff0c;心里就有一种内疚感&#xff0c;…

【Elasticsearch】Elasticsearch动态映射与静态映射详解

文章目录 &#x1f4d1;前言一、Elasticsearch 映射概述1.1 什么是映射&#xff1f;1.2 映射的分类 二、动态映射2.1 动态映射的定义2.2 动态映射的优点2.3 动态映射的缺点2.4 动态映射的应用场景2.5 动态映射的配置示例 三、静态映射3.1 静态映射的定义3.2 静态映射的优点3.3 …

机器学习简介--NLP(二)

机器学习简介 机器学习简介机器学习例子机器学习分类有监督学习有监督学习的应用 无监督学习 机器学习常见概念数据集k折交叉验证过拟合欠拟合评价指标 机器学习简介 机器学习例子 问题&#xff1a; 2&#xff0c;4&#xff0c;6&#xff0c;8&#xff0c;&#xff1f;&#…

【CV炼丹师勇闯力扣训练营 Day22:§7 回溯1】

CV炼丹师勇闯力扣训练营 代码随想录算法训练营第22天 回溯法其实就是暴力查找,回溯的本质是穷举&#xff0c;穷举所有可能&#xff0c;然后选出我们想要的答案&#xff0c;一般可以解决如下几种问题&#xff1a; 组合问题&#xff1a;N个数里面按一定规则找出k个数的集合切割…

Ubuntu18.04新安装--无网络连接、重启黑屏解决教程

一、安装Ubuntu Ubuntu安装需要U盘作为启动盘&#xff0c;在目前教新的电脑中选中GPT作为分区&#xff0c;制作启动盘&#xff0c;其中在安装双系统Ubuntu时&#xff0c;以自定义格式作为存储空间。详细安装过程以以及如何分区请参考下列链接&#xff1a;内含详细安装过程&…

VS Code 常用快捷键大全

Visual Studio Code 是目前最好用的代码编辑器之一。它提供了许多开箱即用的功能以及丰富的第三方扩展&#xff0c;本文将分享常用的 VS Code 快捷键&#xff0c;助你提高开发效率&#xff01; 代码导航 跳转指定行&#xff1a;快速跳转到文件中的指定行&#xff0c;只需按下快…

Unity 数据持久化【PlayerPrefs】

1、数据持久化 文章目录 1、数据持久化PlayerPrefs基本方法1、PlayerPrefs概念2、存储相关3、读取相关4、删除数据思考 信息的存储和读取 PlayerPrefs存储位置1、PlayerPrefs存储的数据在哪个位置2、PlayerPrefs 数据唯一性思考 排行榜功能 2、Playerprefs实践1、必备知识点-反…