一般登录界面都需要用到验证码,下面简单说一下利用Java中的Swing组件制作验证码。
首先new一个JLabel对象,在其上面进行填充;
接着创建一个图片,在图片上画出验证码。要画验证码就必须定义画笔,利用画笔进行绘画。利用随机数,产生随机的验证字母或者数字以及验证码的颜色。
最后利用JLbel的setIcon()方法,将绘画好的图片显示出来。(注意,此方法只能接收Icon类型,所以在此之前,要将图片转换成Icon类型)
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class VerificationCode extends JFrame{
private JLabel label;
int width = 400,height = 180;
public VerificationCode() {
label = new JLabel();
//图片
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//创建画笔
Graphics g = bi.getGraphics();
//设置颜色
Color color = Color.WHITE;
g.setColor(color);
//填充
g.fillRect(0, 0, width, height);
//写入验证码
for(int i = 0 ;i<4;i++) {
char chr = (char)(int)(Math.random()*26+65);
int red = (int)(Math.random()*256);
int green = (int)(Math.random()*256);
int blue = (int)(Math.random()*256);
Color color1 = new Color(red,green,blue);
g.setColor(color1);
g.setFont(new Font("微软雅黑", Font.ITALIC, 40));
g.drawString(chr+"", 27+100*i, 100);
}
//绘制干扰点
//绘制小椭圆
/*Random r =new Random();
for (int i = 0; i < 1000; i++) {
int red = (int)(Math.random()*256);
int green = (int)(Math.random()*256);
int blue = (int)(Math.random()*256);
Color color1 = new Color(red, green, blue);
g.setColor(color1);
int x = r.nextInt(width)-2;
int y = r.nextInt(height)-2;
g.drawRect(x, y, 2, 2);
}*/
//绘制直线
for(int i = 0;i<700;i++) {
int red = (int)(Math.random()*256);
int green = (int)(Math.random()*256);
int blue = (int)(Math.random()*256);
Color color1 = new Color(red, green, blue);
g.setColor(color1);
int x = (int)(Math.random()*width);
int y = (int)(Math.random()*height);
int width1 = (int)(Math.random()*5+1);
int height1 = (int)(Math.random()*5+1);
g.drawRect(x, y, width1, height1);
}
Icon icon = new ImageIcon(bi);//将bi转换程Icon类型
//定义此组件将要显示的图标。只接收Icon类型的setIcon(Icon icon)
label.setIcon(icon);
add(label);
setBounds(100, 100, width, height);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new VerificationCode();
}
}