java绘制验证码。

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wmc_bk/article/details/60333553

温馨提示:

                 代码中的注释值得参考。

/**

 * @author ausu:java绘制验证码。
 *
 */
package indentiy;

import java.awt.Frame;
import java.awt.Panel;
import java.awt.Window;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class DrawingIndentfiy {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        /**
         * 使用java中的类中的方法(即抽象画笔)来绘制验证码。
         * 1.创建一个Frame窗体
         * 2.窗体中包含一个容器。
         * 3.在容器里边绘制验证码,即随机产生数字或字符。
         */
         final Frame frame = new Frame("验证码");//创建Frame对象
         final Panel panel = new MyPanel();
         frame.add(panel);
         frame.setSize(300, 300);
         frame.setLocationRelativeTo(null);//将Frame窗口居中
         frame.setVisible(true);
        
         //为Frame添加(addWindowListener)一个监听对象(WindowAdapter).
         frame.addWindowListener(new WindowAdapter() {
             public void windowClosing(WindowEvent e){
                 Window window = e.getWindow();
                 window.setVisible(false);
             }
        });
    }
}


package indentiy;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Panel;
import java.util.Random;

public class MyPanel extends Panel{
    /**
       *1.重写Panel组件中的paint()方法。
       *  注:
       *   因为,在组件第一次显示时,AWT线程都会自动去调用组件的paint(Graphics g)方法。
       *该方法传入一个Graphics类型的对象用于绘制图形。Graphics为抽象类。
    *   使用:Graohics类——绘图类,其对象为抽象的画笔。
    */
    public void paint(Graphics g){
        int width = 160;//定义验证码图片的宽度
        int height = 40;//定义验证码的高度
        
        g.setColor(Color.LIGHT_GRAY);//设置上下文颜色
        g.fillRect(0,0, width, height);//填充验证码背景
        g.setColor(Color.BLACK);//设置上下文颜色
        g.drawRect(0,0, width -1, height -1);//绘制边框
        
    /**
     * 2.绘制干扰点。
     * 使用:Random类中的方法。
     */
        Random r =new Random();
        for (int i = 0; i < 100; i++) {
            int x= r.nextInt(width)-2;//nextInt(width);此方法返回0-width之间的随机整数。因为,椭圆或圆的width=2,所以x轴需要减去2.
            int y= r.nextInt(height)-2;
            g.drawOval(x, y, 2, 2);//绘制一个椭圆或圆,刚好能够放入x,y,width,height参数指定的矩形中。x,y为椭圆或圆的坐标,width,height为椭圆或圆的宽高。
        }
        
    /**
     * 3.产生随机数或字符    .
     * 使用:Random类及StringBuilder类中的方法。
     */
        g.setFont(new Font("黑体",Font.BOLD,30));//设置验证码字体
        g.setColor(Color.BLACK);//设置验证码颜色
        //产生随机验证码
        //创建一个Char数组,toCharArray()方法是:将将此字符串转换为一个新的字符数组。
        char[] chars = ("0123456789abcdefghijkmnopqrstuvwxyzABCDEFG"+"HIJKHMNOPQRSTUVWXYZ").toCharArray();
        
        StringBuilder sb = new StringBuilder();//有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。
        for (int i = 0; i < 4; i++) {
            int pos = r.nextInt(chars.length);//随机获取Char数组中的下标数。
            char c= chars[pos];//通过数组下标获取,对应的字符。
            sb.append(c+" ");//append 方法:始终将这些字符添加到缓冲区的末端。
        }
        
        g.drawString(sb.toString(), 20, 30);//toString 方法:返回此序列中数据的字符串表示形式。最左侧字符左下角位于(20,30)坐标。
    }
}
/**
 * 总结:
 *    *步骤:
 *        1.先创建一个Frame。
 *        2.再创建一个容器Panel。
 *        3.将Panel添加至Frame中。
 *        4.使用:Random类中的方法,产生随机整数,用于drawOval(x, y, width, height);绘制干扰点的x,y轴。
 *        5.创建一个字符数组来存放数字和字符,再使用StringBuilder类中的nextInt(int n);方法来随机获取字符数组的下标。
 *        6.使用字符生成器(StringBuilder)中的append(char n);方法来获取字符c,并将其添加至缓冲区末端。
 *        7.使用字符生成器(StringBuilder)中的toString();方法将缓冲区末端的字符以字符串的形式返回。
 *        8.使用绘图类(Graphics)的drawString(String str, int x,int y);方法在(x,y)坐标上显示str字符串。

 */

注:此博文为日常学习总结,不当之处,多多指教。


展开阅读全文

没有更多推荐了,返回首页