以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位字符串作为验证码输出,提示用户输 ...
随机推荐
- C++实现对MySQL数据库的连接,以及增删改查
安装好MySQL,建好数据表的前提下. 如果只是想简单实现添加数据或者其他一个操作数据,可以参考另一篇博客. https://www.cnblogs.com/ming-4/p/11544514.htm ...
- jmeter csv 插件讲解
1.变量名称 name,pwd 格式表示因为文本中分割默认是逗号所以变量设置也是按此格式如果想按其他格式可以在分隔符栏自定义 2.忽略首行: 有的csv读取你希望读取的数据有header如: user ...
- AgileReview 代码检视工具使用
AgileReview 它是一个eclipse插件. http://www.agilereview.org/ 官网地址. 四种下载插件方式. 1.Marketplace QuickInstall ...
- Springboot学习:核心配置文件
核心配置文件介绍 SpringBoot使用一个全局配置文件,配置文件名是固定的 application.properties application.yml 配置文件的作用:修改SpringBoot自 ...
- Cisco Spectrum Expert(Wave2 AP)
在一些版本中,我们可能会发现,AP16,26或AP17,27,37等支持Spectrum Expert Connect (即SE-Connect),该模式可以让AP将频谱分析所述数据发送到对应的分析仪 ...
- 文件的读取与保存(try-with-resource优雅关闭)
借鉴:https://www.cnblogs.com/itZhy/p/7636615.html 一.背景 在Java编程过程中,如果打开了外部资源(文件.数据库连接.网络连接等),我们必须在这些外部资 ...
- 【原】Mysql最大连接数
MySQL最大连接数的默认值是100, 这个数值对于并发连接很多的数据库的应用是远不够用的,当连接请求大于默认连接数后,就会出现无法连接数据库的错误,因此我们需要把它适当调大一些. 在使用MySQL数 ...
- 01背包第k最优解
附题目链接:Bone Collector II Input The first line contain a integer T , the number of cases.Followed by T ...
- Linux下安装 boost 库
1. 先去官网下载压缩包: https://www.boost.org/ 2. 解压 tar -zvxf boost_1_70_0.tar.gz 2. cd 进入根目录,然后执行: ./bootstr ...
- arcPy实现要素图层数据的复制(选择特定字段填写属性)
>>> import arcpy>>> fc=r"D:\楚雄州数据\testdata.gdb">>> editor=arcpy ...