用Java制作一个简单的图片验证码
//Java实现简单验证码功能
package project;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
@SuppressWarnings("serial")
public class denglu extends JFrame {
private JLabel name, pass, card, imageCard;
private JTextField nameText, passText, cardText;
private JButton login;
private int width = 100, height = 30;
private String str = "";
public denglu() {
setTitle("登陆窗体");
setFont(new Font("", Font.BOLD, 24));
setLayout(null);// 自定义布局
// 负责产生验证码图片
Icon icon = new ImageIcon(getCardImage(width, height));
name = new JLabel("账 号");
pass = new JLabel("密 码");
card = new JLabel("验证码");
imageCard = new JLabel(icon);
nameText = new JTextField();
passText = new JTextField();
cardText = new JTextField();
login = new JButton("登 录");
name.setBounds(80, 20, 60, 30);
pass.setBounds(80, 60, 60, 30);
card.setBounds(80, 100, 60, 30);
imageCard.setBounds(240, 100, width, height);
nameText.setBounds(150, 20, 200, 30);
passText.setBounds(150, 60, 200, 30);
cardText.setBounds(150, 100, 80, 30);
login.setBounds(120, 160, 220, 30);
add(name);
add(pass);
add(card);
add(imageCard);
add(nameText);
add(passText);
add(cardText);
add(login);
//注册事件
addMouseListener(new ChangeCard());
setBounds(0, 0, 450, 260);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public Image getCardImage(int width, int height) {
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
int red1 = (int) (Math.random() * 256);
int green1 = (int) (Math.random() * 256);
int blue1 = (int) (Math.random() * 256);
Color c1 = new Color(red1, green1, blue1);
g.setColor(c1);
g.fillRect(0, 0, width, height);
//生成文字
int red2 = (int) (Math.random() * 256);
int green2 = (int) (Math.random() * 256);
int blue2 = (int) (Math.random() * 256);
Color c2 = new Color(red2, green2, blue2);
str = "";
for (int i = 0; i < 4; i++) {
char ch = (char)((int)(Math.random()*26+65));
str+=ch;
}
//加入干扰点
for (int i = 0; i < 60; i++) {
int red11 = (int)(Math.random()*256);
int green11 = (int)(Math.random()*256);
int blue11 = (int)(Math.random()*256);
Color color3 = new Color(red11, green11, blue11);
g.setColor(color3);
int x1 = (int)(Math.random()*width);
int y1 = (int)(Math.random()*height);
int x2 = (int)(Math.random()*width);
int y2 = (int)(Math.random()*height);
g.drawLine(x1, y1, x2, y2);
}
g.setColor(c2);
int x = (int)(Math.random()*(width/3));
int y = (int)(Math.random()*(height/2)+10);
g.setFont(new Font("", Font.BOLD, 24));
g.drawString(str, x, y);
return image;
}
//监听类:鼠标单击时执行,即单击验证码时再次随机产生一个验证码
class ChangeCard implements MouseListener{
@Override
public void mouseClicked(MouseEvent e) {
Icon icon = new ImageIcon(getCardImage(width, height));
imageCard.setIcon(icon);
}
@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
}
}
public static void main(String[] args) {
new denglu();
}
}
用Java制作一个简单的图片验证码的更多相关文章
- Expression Blend4经验分享:制作一个简单的图片按钮样式
这次分享如何做一个简单的图片按钮经验 在我的个人Silverlight网页上,有个Iphone手机的效果,其中用到大量的图片按钮 http://raimon.6.gwidc.com/Iphone/de ...
- 【数据结构与算法】Java制作一个简单数组类
bobo老师的玩转算法系列–玩转数据结构 简单记录 文章目录 不要小瞧数组 - 制作一个数组类 1 .使用Java中的数组 数组基础 简单使用 2.二次封装属于我们自己的数组 数组基础 制作属于我们自 ...
- java制作一个简单的抽签程序
首先需要导入import java.util.Random;才能使用随机类Random:Random生成随机数介绍:https://www.cnblogs.com/prodigal-son/p/128 ...
- 制作一个简单的WPF图片浏览器
原文:制作一个简单的WPF图片浏览器 注:本例选自MSDN样例,并略有改动.先看效果: 这里实现了以下几个功能:1. 对指定文件夹下所有JPG文件进行预览2. 对选定图片进行旋转3. 对选定图片 ...
- 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小
原文:http://www.jb51.net/article/75002.htm 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实 ...
- 一般处理程序生成简单的图片验证码并通过html验证用户输入的验证码是否正确
一般处理程序生成简单的图片验证码并通过html验证用户输入的验证码是否正确 最近没事研究了下验证码的的动态生成及通过cookie实现HTML页面对用户输入的验证码的校验,简要如下: 1.写 ...
- TensorFlow练习13: 制作一个简单的聊天机器人
现在很多卖货公司都使用聊天机器人充当客服人员,许多科技巨头也纷纷推出各自的聊天助手,如苹果Siri.Google Now.Amazon Alexa.微软小冰等等.前不久有一个视频比较了Google N ...
- 手把手制作一个简单的IDEA插件(环境搭建Demo篇)
新建IDEA插件File --> new --> Project--> Intellij PlatForm Plugin-->Next-->填好项目名OK 编写插件新建工 ...
- 使用 java 实现一个简单的 markdown 语法解析器
1. 什么是 markdown Markdown 是一种轻量级的「标记语言」,它的优点很多,目前也被越来越多的写作爱好者,撰稿者广泛使用.看到这里请不要被「标记」.「语言」所迷惑,Markdown 的 ...
随机推荐
- Linux进程实践(1) --Linux进程编程概述
进程 VS. 程序 什么是程序? 程序是完成特定任务的一系列指令集合. 什么是进程? [1]从用户的角度来看:进程是程序的一次执行过程 [2]从操作系统的核心来看:进程是操作系统分配的内存.CPU时间 ...
- DQM Serial Sync Index Program ERROR
Error syncing hz_stage_party_sites_t1:ORA-20000:Oracle Text 错误: DRG-10502:索引AR.HZ_STAGE_PARTY_SITES_ ...
- 三层登录实例VB.NET版详解---理论加实战篇
层,百度百科这样解释,首先-重叠起来的东西:重叠起来的东西中的一部分:层次|表层|大气层.其次-重叠:重复:层峦叠嶂|层出不穷.最后-量词,用于可以分出层次的事物,女孩儿强烈的第六感,三层中的层一定是 ...
- Html5的学习之旅-Html5的web Storage概述(16)
在html5中除了canvas,另外一个非常重要的功能是客户端本地存储web storage,之前可以在用户端Cookies存贮用户名等信息,后来发现Cookies存储存在以下问题: 大小:Cooki ...
- 【一天一道LeetCode】#48. Rotate Image
一天一道LeetCode系列 (一)题目 You are given an n x n 2D matrix representing an image. Rotate the image by 90 ...
- 移植Cocos2D到Android平台的原理
幸运的,SpriteBuilder使得适配(安卓)多种多样的屏幕尺寸变得容易起来,因为Android Xcode插件允许你使用任何Cocos2D的特性并且可以继续使用很多iOS的框架(framewor ...
- 基于ROS_Arduino室内移动机器人SLAM实验测试
纯手工搭建的机器人,因此外观并不美. 基于ROS(indigo)以及Arduino等搭建软硬件平台,包括语音.视觉.激光.码盘等传感器设备. 整体如下图所示: 底盘特写: 语音输入: Arduino模 ...
- CentOS 6.X启动流程
CentOS 6.X启动流程 /boot分区 启动引导程序是默认可以识别boot分区的.因此在系统还无法加载硬盘的时候,boot分区是可以识别的! initramfs内存文件系统 CentOS 6.x ...
- OC中的枚举类型
背景 一直对OC中的位移操作枚举不太理解,查找到两篇介绍OC中枚举的文章,觉得很不错. 什么是位移操作枚举呢? typedef NS_OPTIONS(NSUInteger, UIViewAutores ...
- Obj-C中内存的管理一瞥
注意,ARC仅仅(自动)释放你手工管理的Objective-C类实例的内存, 但是不会释放由C函数或者Core Foundation(Cocoa的底层,C语言的变体)申请的内存.