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,一经查实,立即删除!

相关文章

【第四套】华为 2024 年校招-硬件电源岗

1、 其他参数不变,当 LLC 谐振电路的 Lm 增⼤时&#xff0c;描述错误的是 A.⼯作频率范围变⼩ B.关断电流减⼩ C.关断损耗减⼩ D.谐振电感减⼩ 2、 五类双绞线带宽可达 A. 10MHZ B. 20 MHZ C. 1GHZ D. 100MHZ 3、 当⽇照条件达到⼀定程度时,太阳能电池由于⽇照的变化⽽引起较明…

MyBatis 插入数据库生成id问题

核心代码 Mapper配置文件 <!-- 批量插入标签并返回主键 --> <insert id"insertBatch" parameterType"list" useGeneratedKeys"true" keyProperty"tagId">INSERT INTO tag (label)VALUES<foreach collection"lis…

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;企业可以控…

Docker容器基础:Docker的安装与基本使用

Docker容器基础&#xff1a;Docker的安装与基本使用 前言 Docker是一种开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的Linux机器上&#xff0c;也可以实现虚拟化。本文将介绍Docker的安装…

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

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

redis实现简单分布式锁

1.redisTemplate实现简单分布式锁 AutowiredRedisTemplate redisTemplate;/*** redis分布式锁演示案例&#xff0c;此处使用redisTemplate* param stockId 此处以扣减库存为例子&#xff0c;stockId代表要扣减库存的商品id,库存数据是提前存在redis的&#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…

Java8新特性常见用法

Java8新特性 示例类Stream API 使用示例forEach:遍历Stream:创建流map:转换元素filter:过滤元素collect(收集元素) 和 Collectors(分组、连接)sorted 和 comparing(搭配排序)toMap:转换Map元素collectingAndThen:过滤掉相同数据toUpperCase:转大写distinct:去重c…

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

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

独孤思维:你自己都不相信的副业,怎么能赚钱

要明白&#xff0c;你做副业的目的是什么&#xff1f; 如果你打心眼里&#xff0c;看不上这个项目&#xff0c;或者心不甘情不愿的被动推进项目的实操。 那么我建议你直接放弃。 不要不情愿地去做。 不要当成任务去完成。 如果抱着这份心态去做副业。 你的副业&#xff0…

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

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

一种特殊的二叉树 哈夫曼树(Huffman Tree)

哈夫曼树(Huffman Tree)是一种特殊的二叉树,它在信息编码领域有着广泛的应用,特别是在数据压缩技术中。下面我将通过图文结合的方式,详细介绍哈夫曼树的概念、构建方法以及应用场景。 哈夫曼树的概念 哈夫曼树是一种特殊的二叉树,由David Huffman于1952年提出。它主要用…

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

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

React Navigation 和 Expo Router

React Navigation 是 React Native 社区最常用的导航库&#xff0c;其具有高度可定制性且性能良好的特性。它提供了一系列导航器&#xff08;如堆栈导航器、标签导航器、抽屉导航器等&#xff09;&#xff0c;可以满足绝大多数的页面导航需求。 Expo Router 是 Expo 官方最新发…

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…

怎么办理固体废物处理处置工程乙级资质

1. 准备工作 企业法人资格&#xff1a;确保企业具有独立法人资格。 注册资本&#xff1a;注册资本不少于100万元人民币。 社会信誉&#xff1a;企业需具有良好社会信誉。 人员配置&#xff1a; 至少配备14名专业技术人员&#xff0c;其中注册人员10名&#xff0c;非注册人…

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

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