以java实现的一个简单登录界面(带验证码)
本文参考与:https://blog.csdn.net/wyf2017/article/details/78831744
https://blog.csdn.net/MengKun822/article/details/89302921
一.登录界面
1.程序代码
import java.awt.*;//导入awt包
import javax.swing.*;//导入swing包
import java.awt.event.ActionListener;//导入awt包中的监听器事件包
import java.awt.event.ActionEvent;//导入awt包中的ActionEvent事件包 public class EnterScreen extends JFrame {
static int s=0;
public EnterScreen() {
Yanzhencode vcode = new Yanzhencode();
setSize(300,290);//设计窗体的大小
setTitle("请登录");
setBackground(Color.RED);//设置背景颜色
JLabel a=new JLabel("登录名"); //实例化JLabel对象
JLabel b=new JLabel("密 码");
JLabel g=new JLabel("忘记用户名/密码?");
JLabel h=new JLabel("验证码");
g.setForeground(Color.BLUE);
JTextField c=new JTextField(15);//实例化用户名文本框
JPasswordField d=new JPasswordField(15);//实例化密码框
JTextField k=new JTextField(4);//实例化验证码框
d.setEchoChar('*');//将输入密码框中的密码以*显示出来
JButton e=new JButton("登录");
JButton f=new JButton("快速注册");
e.setBackground(Color.YELLOW);//设置登录按钮字体颜色
f.setForeground(Color.GRAY);//设置快速登录按钮填充色
setVisible(true);//使窗体可视化
Container m=getContentPane();//获取一个容器
getContentPane().setBackground(Color.WHITE);//设置窗体填充色
// 将用户名、密码的Jlabel和用户名JTextField文本框、密码JPasswordField密码框以及确定JButton、快速注册JButton添加到container容器里面 //
m.add(a);
m.add(b);
m.add(c);
m.add(d);
m.add(e);
m.add(f);
m.add(g);
m.add(h);
m.add(k);
m.add(vcode);
setBounds(300,300,300,300);//设置窗体的长宽各为300、300 让其显示在左上方的300、300处
m.setLayout(null);
// a、b、c、d、e、f显示在container容器中的位置坐标
a.setBounds(10,40,50,18);
b.setBounds(10,80,50,18);
c.setBounds(60,40,130,18);
d.setBounds(60,80,130,18);
h.setBounds(10,120,50,18);
k.setBounds(60,120,80,18);
e.setBounds(90,180,100,30);
f.setBounds(90,220,100,30);
g.setBounds(190,75,100,30);
vcode.setBounds(140,110,80,30);
e.addActionListener(new ActionListener() {//对登录按钮添加监听事件 @SuppressWarnings("deprecation")
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub if(c.getText().trim().equals("xiaoyang")&&new String(d.getPassword()).equals("123456")&&s==1) {//equals函数进行用户名和密码的匹配
JOptionPane.showMessageDialog(null,"登录成功"); new NewFrame();//进入到NewFrame这个窗体中
}else if(c.getText().trim().equals("xiaoyang")&&new String(d.getPassword()).equals("123456")&&s==0) {
JOptionPane.showMessageDialog(null,"验证码输入错误");
}else {
JOptionPane.showMessageDialog(null, "登录失败,用户名、密码或验证码输入错误");
}
} });
f.addActionListener(new ActionListener(){//对快速注册按钮添加监听事件
@SuppressWarnings("deprecation")
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
new zhuce();//进入都到zhuce窗体中
} });
//判断输入验证码是否正确
if(k.getText()== null) {
s=0;
}else if(vcode.getCode() == null) {
s=1;
}else if(vcode.getCode() .equals(k.getText())) {
s=1;
}else {
s=0;
}
} public static void main(String[] args) {
new EnterScreen(); } }
2.登录界面截图


二.快速注册界面
1.程序代码
import java.awt.*;
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.sql.*;
import java.awt.Container; import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField; public class zhuce extends JFrame {
public zhuce() {
setSize(300,250);//设计窗体的大小
JLabel a=new JLabel("用户名"); //实例化JLabel对象
JLabel b=new JLabel("密 码");
JLabel h=new JLabel("再次确认密码");
JTextField c=new JTextField(15);//实例化用户名文本框
JPasswordField d=new JPasswordField(15);//实例化密码文本框
JPasswordField hd=new JPasswordField(15);//实例化密码文本框
d.setEchoChar('*');//设置密码隐藏制度
JButton e=new JButton("确定");
JButton f=new JButton("重置");
JButton g=new JButton("返回");
setVisible(true);
//获取一个容器
Container m=getContentPane();
// 将用户名、密码的Jlabel和用户名JTextField文本框、密码JPasswordField密码框以及确定JButton、快速注册JButton添加到container容器里面
m.add(a);
m.add(b);
m.add(h);
m.add(hd);
m.add(c);
m.add(d);
m.add(e);
m.add(f);
m.add(g);
//设置窗体的长宽各为300、250 让其显示在左上方的300、250处
setBounds(300,250,300,250);
m.setLayout(null);
// a、b、c、d、e、f显示在container容器中的位置坐标
a.setBounds(10,40,50,18);
b.setBounds(10,80,50,18);
h.setBounds(5,120,80,18);
c.setBounds(60,40,200,18);
d.setBounds(60,80,200,18);
hd.setBounds(90,120,180,18);
e.setBounds(110,160,60,30);
f.setBounds(30,160,60,30);
g.setBounds(190,160,60,30);
g.addActionListener(new ActionListener() {//对返回按钮添加监听事件
@SuppressWarnings("deprecation")
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
new EnterScreen(); }
});
f.addActionListener(new ActionListener() {//对确认按钮添加监听事件
@SuppressWarnings("deprecation")
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
new EnterScreen(); }
});
e.addActionListener(new ActionListener() {//对确认按钮添加监听事件
@SuppressWarnings("deprecation")
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
new zhuce(); }
});
}
}
2.快速注册界面截图

三.验证码部分
1.验证码程序
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener; import java.util.Random; import javax.swing.JComponent; public class Yanzhencode extends JComponent implements MouseListener { private String codes; //自动生成的验证码 private int width, height = 40; //设置验证码高度、宽度 private int codesLength = 4; //设置代码长度 private Random random = new Random(); //生成数字的方法 public Yanzhencode() {
width = this.codesLength * 16 + (this.codesLength - 1) * 10; //根据验证码长度设置宽度
setPreferredSize(new Dimension(width, height)); //设置背景大小
setSize(width, height); //设置验证码长度和宽度
this.addMouseListener(this);
setToolTipText("点击可更换验证码");
}
//得到生成的验证码
public int getCodesLength() {
return codesLength;
} //设置验证码的长度
public void setCodesLength(int codeLength) {
if(codesLength < 4) {
this.codesLength = 4;
} else {
this.codesLength = codeLength;
} } public String getCode() {
return codes;
} //让验证码产生随机的颜色
public Color getRandColor(int min, int max) { if (min > 255)
min = 255;
if (max > 255)
max = 255;
int red = random.nextInt(max - min) + min;
int green = random.nextInt(max - min) + min;
int blue = random.nextInt(max - min) + min;
return new Color(red, green, blue);
}
// 设置验证码具体的数字或字母是什么
protected String generateCode() {
char[] codes = new char[this.codesLength];
for (int i = 0, len = codes.length; i < len; i++) {
if (random.nextBoolean()) {
codes[i] = (char) (random.nextInt(10) + 48);
} else {
codes[i] = (char) (random.nextInt(26) + 97);
}
}
this.codes = new String(codes);
return this.codes;
} @Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if(this.codes == null || this.codes.length() != this.codesLength) { //判断生成的验证码是否为空或超出长度
this.codes = generateCode();
}
width = this.codesLength * 16 + (this.codesLength - 1) * 10;
super.setSize(width, height); //接口使用,验证码字体大小
super.setPreferredSize(new Dimension(width, height));//接口使用,验证码背景大小
Font mFont = new Font("Arial", Font.BOLD | Font.ITALIC, 25); //设置字体和字体大小
g.setFont(mFont); //设置对象
//绘制出验证码的背景的矩形轮廓
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(getRandColor(200, 250));
g2d.fillRect(0, 0, width, height);
g2d.setColor(getRandColor(180, 200));
g2d.drawRect(0, 0, width - 1, height - 1);
//绘制出验证码背景的线
int i = 0, len = 150;
for (; i < len; i++) {
int x = random.nextInt(width - 1);
int y = random.nextInt(height - 1);
int x1 = random.nextInt(width - 10) + 10;
int y1 = random.nextInt(height - 4) + 4;
g2d.setColor(getRandColor(180, 200));
g2d.drawLine(x, y, x1, y1);
} //绘制出验证码的具体字母
i = 0; len = this.codesLength;
FontMetrics fm = g2d.getFontMetrics();
int base = (height - fm.getHeight())/2 + fm.getAscent();
for(;i<len;i++) {
int b = random.nextBoolean() ? 1 : -1;
g2d.rotate(random.nextInt(10)*0.01*b);
g2d.setColor(getRandColor(20, 130));
g2d.drawString(codes.charAt(i)+"", 16 * i + 10, base);
}
} //下一个验证码
public void nextCode() {
generateCode();
repaint();
} @Override
public void mouseClicked(MouseEvent e) { nextCode();
} @Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub } @Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub } @Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub } @Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub }
}
2.验证码实现效果

点击验证码图片后,验证码会更换

版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
以java实现的一个简单登录界面(带验证码)的更多相关文章
- JAVA课程设计——一个简单的教务人事管理系统
大三上学期期末总结,没错,上学期,写在下学期新学期开始,哈哈哈. 上学期学习了面向对象程序设计,课程设计的题目使用JAVA语言完成一个简单的教务人事管理系统,能够实现访问数据库的登录验证,分别按部门和 ...
- Android studio 开发一个用户登录界面
Android studio 开发一个用户登录界面 activity_main.xml <?xml version="1.0" encoding="utf-8&qu ...
- 使用Java语言编写一个五子棋UI界面并实现网络对战功能(非局域网)
使用Java语言编写一个五子棋UI界面并实现网络对战功能(非局域网) 一,前期准备 1,Java IDE(Eclipse)与JDK的安装与配置jdk-15.0.1-免配置路径版提取码:earu免安装版 ...
- 使用JAVA实现的一个简单IOC注入实例
https://blog.csdn.net/echoshinian100/article/details/77977823 欲登高而望远,勿筑台于流沙 RSS订阅 原 使用JAVA实现的一个简单IOC ...
- 使用 jquery 的 上传文件插件 uploadify 3.1 配合 java 来做一个简单的文件上次功能。并且在界面上有radio 的选择内容也要上传
使用 jquery 的 上传文件插件 uploadify 3.1 配合 java 来做一个简单的文件上次功能.并且在界面上有radio 的选择内容也要上传 uploadify 插件的 下载和文档地址 ...
- Java RMI 实现一个简单的GFS(谷歌文件系统)——介绍篇
本系列主要是使用Java RMI实现一个简单的GFS(谷歌文件系统,google file system),首先整体简单介绍下该项目. [为了更好的阅读以及查看其他篇章,请查看原文:https://w ...
- Java RMI 实现一个简单的GFS(谷歌文件系统)——背景与设计篇
目录 背景 系统设计 1. 系统功能 2. Master组件 2.1 命名空间 2.2 心跳机制 2.3 故障恢复和容错机制 3. ChunkServer组件 3.1 本地存储 3.2 内存命中机制 ...
- ASP .NET登录界面用户验证码代码
//ASP .NET用户登录界面经常用到验证码代码如下 private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码 ...
- JAVA语言实现简单登录界面
程序设计思想: 使用Math.random()方法循环生成6个97~122之间的随机整数(对应ASCII码值‘a’~‘z’),将其转化为char型变量,连接成为一个6位字符串作为验证码输出,提示用户输 ...
随机推荐
- rapidxml读xml文件
student.xml文件内容: int readXML(void) { rapidxml::file<> file("student.xml"); rapidxml: ...
- python两个_多个字典合并相加
这只是符合比较正常的需求和场景. #一.适用合并两个字典(key不能相同否则会被覆盖),简单,好用. A = {'a': 11, 'b': 22} B = {'c': 48, 'd': 13} #up ...
- DotNet中静态成员、静态类、静态构造方法和实例构造方法的区别与联系
在面向对象的C#程序设计中,关于静态的概念一直是很多人搞不明白的.下面介绍这些带“静态”的名称. 1.静态成员: 定义:静态成员是用static关键字修饰的成员(包括字段属性和方法) 所属:静态成员是 ...
- 吴裕雄 python 神经网络——TensorFlow 数据集高层操作
import tempfile import tensorflow as tf train_files = tf.train.match_filenames_once("E:\\output ...
- 使用docker构建第一个spring boot项目
在看了一些简单的docker命令之后 打算自己尝试整合一下docker+spring boot项目本文是自己使用docker+spring boot 发布一个项目1.docker介绍 docke是提供 ...
- vs2013设置不生成.sdf和ipch文件
转载:https://blog.csdn.net/sinat_23338865/article/details/53393760 使用VS2013建立解决方案时,会生成SolutionName.sdf ...
- 洛谷 CF804B Minimum number of steps
嗯... 题目链接:https://www.luogu.org/problemnew/show/CF804B 这道题没有什么技巧,只是一道找规律的题. 首先看到“ab”可以换成“bba”,所以首先要确 ...
- nyoj 57
6174问题 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替 ...
- ZooKeeper 相关知识
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/zhang123456456/articl ...
- 验证码校验(Ajax)
show.jsp <%@ page language="java" contentType="text/html; charset=utf-8" page ...