MainFrame类主要实现了GUI的界面和简单的验证逻辑

package com.applicationimport java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;public class MainFrame extends JFrame {private static final long serialVersionUID = 6760471507923160452L;private JTextField codeText;private JPasswordField pwdText;private JTextField nameText;ChineseCodePanel imageCode = null;/*** Launch the application* * @param args*/public static void main(String args[]) {EventQueue.invokeLater(new Runnable() {public void run() {try {MainFrame frame = new MainFrame();frame.setVisible(true);} catch (Exception e) {e.printStackTrace();}}});}/*** Create the frame*/public MainFrame() {super();setResizable(false);setTitle("中文验证码");setBounds(100, 100, 426, 210);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);imageCode = new ChineseCodePanel();// 创建类的实例imageCode.setBounds(170, 85, 106, 35);// 设置位置getContentPane().add(imageCode); // 添加验证码final JPanel panel = new JPanel();panel.setLayout(null);getContentPane().add(panel, BorderLayout.CENTER);final JButton button = new JButton();button.addActionListener(new ActionListener() {public void actionPerformed(final ActionEvent e) {if (imageCode != null) {imageCode.draw(); // 调用方法生成验证码}}});button.setText("换一张");button.setBounds(301, 90, 94, 28);panel.add(button);final JLabel label = new JLabel();label.setText("用户名:");label.setBounds(29, 25, 66, 18);panel.add(label);final JLabel label_1 = new JLabel();label_1.setText("密   码:");label_1.setBounds(29, 59, 66, 18);panel.add(label_1);nameText = new JTextField();nameText.setBounds(85, 23, 310, 22);panel.add(nameText);pwdText = new JPasswordField();pwdText.setBounds(85, 57, 310, 22);panel.add(pwdText);final JLabel label_1_1 = new JLabel();label_1_1.setText("验证码:");label_1_1.setBounds(29, 95, 66, 18);panel.add(label_1_1);codeText = new JTextField();codeText.setBounds(85, 93, 77, 22);panel.add(codeText);final JButton button_1 = new JButton();button_1.addActionListener(new ActionListener() {public void actionPerformed(final ActionEvent e) {String username = nameText.getText();// 从文本框中获取用户名String password = new String(pwdText.getPassword());// 从密码框中获取密码String code = codeText.getText();// 获得输入的验证码String info = "";// 用户登录信息// 判断用户名是否为null或空的字符串if (username == null || username.isEmpty()) {info = "用户名为空!";}// 判断密码是否为null或空的字符串else if (password == null || password.isEmpty()) {info = "密码为空!";}// 判断验证码是否为null或空的字符串else if (code == null || code.isEmpty()) {info = "验证码为空!";}// 判断 验证码是否正确else if (!code.equals(imageCode.getNum())) {info = "验证码错误!";}// 如果用户名与密码均为"kuaile",则登录成功else if (username.equals("kuaile") && password.equals("kuaile")) {info = "恭喜,登录成功";} else {info = "用户名或密码错误!";}JOptionPane.showMessageDialog(null, info);// 通过对话框弹出用户登录信息}});button_1.setText("登  录");button_1.setBounds(42, 134, 106, 28);panel.add(button_1);final JButton button_1_1 = new JButton();button_1_1.addActionListener(new ActionListener() {public void actionPerformed(final ActionEvent e) {nameText.setText("");// 清除用户名文本框内容pwdText.setText("");// 清除密码文本框内容codeText.setText("");// 清除验证码文本框内容}});button_1_1.setText("重  置");button_1_1.setBounds(191, 134, 106, 28);panel.add(button_1_1);}}

ChineseCodePanel类实现了验证码设计产生的内部逻辑

package com.applicationimport java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.swing.JPanel;/*** 验证码面板* **/
public class ChineseCodePanel extends JPanel {private static final long serialVersionUID = -3124698225447711692L;public static final int WIDTH = 120;// 宽度public static final int HEIGHT = 35;// 高度private String num = "";// 验证码Random random = new Random();// 实例化Randompublic ChineseCodePanel() {this.setVisible(true);// 显示面板setLayout(null);// 空布局}public void paint(Graphics g) {String hanZi = "我有一只小毛驴我从来都不骑今天我去上学校我真的很开心";// 定义验证码使用的汉字BufferedImage image = new BufferedImage(WIDTH, HEIGHT,BufferedImage.TYPE_INT_RGB);// 实例化BufferedImageGraphics gs = image.getGraphics(); // 获取Graphics类的对象if (!num.isEmpty()) {num = "";// 清空验证码}Font font = new Font("黑体", Font.BOLD, 20); // 通过Font构造字体gs.setFont(font);// 设置字体gs.fillRect(0, 0, WIDTH, HEIGHT);// 填充一个矩形// 输出随机的验证文字for (int i = 0; i < 4; i++) {int index = random.nextInt(hanZi.length());// 随机获得汉字的索引值String ctmp  = hanZi.substring(index,index+1);// 获得指定索引处的一个汉字num += ctmp;// 更新验证码Color color = new Color(20 + random.nextInt(120), 20 + random.nextInt(120), 20 + random.nextInt(120));// 生成随机颜色gs.setColor(color); // 设置颜色Graphics2D gs2d = (Graphics2D) gs;// 将文字旋转指定角度AffineTransform trans = new AffineTransform();// 实例化AffineTransformtrans.rotate(random.nextInt(45) * 3.14 / 180, 22 * i + 8, 7);float scaleSize = random.nextFloat() + 0.8f;// 缩放文字if (scaleSize > 1f)scaleSize = 1f;// 如果scaleSize大于1,则等于1trans.scale(scaleSize, scaleSize); // 进行缩放gs2d.setTransform(trans);// 设置AffineTransform对象gs.drawString(ctmp, WIDTH / 6 * i + 28, HEIGHT / 2);// 画出验证码}g.drawImage(image, 0, 0, null);// 在面板中画出验证码}// 生成验证码的方法public void draw() {repaint();// 调用paint()方法}public String getNum() {return num;// 返回验证码}
}

Java 图片验证码的实现和模拟简单的登录相关推荐

  1. Java 图片验证码/图形验证码 亲测

    Java 图片验证码/图形验证码 1. Maven包 pom.xml 2. 图片验证码工具类 3. 生成验证码,图片验证码 和 验证接口 4. 验证页面 index.html 1. Maven包 po ...

  2. 【java图片验证码】Java 服务端生成图片验证码及验证

    Java 服务端生成图片验证码及验证 简介 验证码是防止有人利用机器人自动批量注册.对特定的注册用户用特定程序暴力破解方 式进行不断的登录.灌水.因为验证码是一个混合了数字或符号的图片,人眼看起来都费 ...

  3. java 验证码 中文乱码_问题记录-java图片验证码显示乱码

    部署机器 操作系统:centos 7 java版本: java version "1.7.0_80" 问题症状 将一个java web的程序部署到了两台配置相同的服务器上之后(服务 ...

  4. 自己封装的一个java图片验证码

    原文:http://www.cnblogs.com/chiangchou/p/VCodeGenerator.html 验证码生成器: 1 package com.lz.Tools; 2 3 impor ...

  5. Python OpenCV 图片滑块验证码 滑块图片验证码 快速自动识别方案 代码简单 模板匹配识别 识别成功率达90%+

    前言 通过上一篇的文章大家已经对图片滑块验证码已经有了初步的了解,图片滑块验证码的核心关键在于图片识别接下来接入讲解.因为初版滑块图片识别虽然能识别验证码,通过一些策略调整也相对提高了一些图片识别率, ...

  6. Day239.RBAC模式、动态加载用户权限资源规则数据规则、【记住我】注销多次登录图片验证码session验证码验证功能 -springsecurity-jwt-oauth2

    1.RBAC权限管理模型 一.RBAC权限模型简介 RBAC权限模型(Role-Based Access Control)即:基于角色的权限控制.模型中有几个关键的术语: 用户:系统接口及功能访问的操 ...

  7. Java实现验证码验证功能

    Java如何实现验证码验证功能呢?日常生活中,验证码随处可见,他可以在一定程度上保护账号安全,那么他是怎么实现的呢? Java实现验证码验证功能其实非常简单:用到了一个Graphics类在画板上绘制字 ...

  8. java 滑动验证码

    前言 在实际的登陆场景或者注册场景中我们总是可以见到各式各样的验证码,有四位的数字字母验证码,滑块验证码,算数验证码,短信验证码,还有类似于12306的逆天验证码.验证码的生成与校验可在前端也可以在后 ...

  9. 验证码图片 java_Java实现图片验证码具体代码

    本文实例为大家分享了Java图片验证码代码,供大家参考,具体内容如下 网页显示效果: index.jsp使用两种方式强制图片更新: 1.设置图片输出时不缓存. 2.用js改变请求的地址. 第一个web ...

最新文章

  1. 图解:消息传输的架构模式
  2. Nature综述:工程微生物组的通用原则和最佳实践
  3. 从视频到语言: 视频标题生成与描述研究综述
  4. Django学习笔记2:一个简单的开发实例
  5. 蓝桥杯2017初赛-打印大X-找规律
  6. 执行Plugins下的install:install报错:The packaging for this project did not assign a file to the build artif
  7. 阿里云助力浙江大学信息化建设,以实时数据驱动校园智能管理
  8. android相关论文,android
  9. python3 + flask + sqlalchemy +orm(3):多对多关系
  10. python程序员面试宝典 剑指offer_自学java,找工作看程序员面试宝典和剑指offer,还是看java面试宝典和程序员面试宝典?...
  11. Cisco2811配置Qos实现带宽分流
  12. python邮件发送 STMP
  13. 斐讯T1电视盒子刷机指南,已排大坑
  14. 【lssvm分类】基于最小二乘支持向量机lssvm实现数据分类matlab代码
  15. 内联css加伪元素,使用CSS:前和:后内联CSS伪元素?(Using CSS :before and :after p
  16. 资源收藏:扁平化风格的图标
  17. vmware virtual machine must be running in order to be migrated
  18. 如何合并磁盘分区 windows7调整分区大小方法
  19. 通过数据分析找出Netflix最适合学习英语的电影和电视剧
  20. 无向图的关联矩阵JAVA_图的矩阵表示无向图及有向图的关联矩阵.doc

热门文章

  1. python语言入门-python语言入门资料
  2. python自动化办公excel-Python自动化办公之操作Excel文件
  3. 语音识别技术应用领域介绍
  4. erp服务器维护数据备份,erp服务器备份
  5. python如何输出整数逆序_python字符串类型及操作
  6. SpringCloud--Eureka 注册中心原理及其搭建
  7. 上传本地代码到github
  8. 【Spring笔记】c空间和p命名空间注入
  9. 数据结构笔记:二叉树的构造(根据遍历顺序构造二叉树)
  10. LIRE的使用:搜索相似的图片 1