Java基础入门 AWT绘图 绘制图片验证码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40788630/article/details/82345056

很多GUI程序都需要在组件上绘制图形,比如实现一个五子棋小游戏就需要在组件上绘制棋盘和棋子。在java.awt包中专门提供了一个Graphics类,它相当于一个抽象的画笔,其中其中提供了各种绘制图形的方法,使用Graphics类的方法就可以完成在组件上绘制图形。下面为Graphics的常用方法:

Graphics常用方法
方法声明 方法描述
void setColor(Color c) 将此图形上下文的当前颜色设置成指定颜色
void setFont(Font f) 将此图形上下文的当前文字设置成指定文字
void drawLine(int x1,int y1,int x2,int y2) 以(x1,y1)和(x2,y2)为端点绘制一条直线
void drawRect(int x,int y,int width,int height) 绘制指定的矩形。矩形的左边缘和右边缘分别位于x,x+width,举行的上边缘和下边缘分别位于y,y+height
void drawOval(int x,int y,int width,int height) 绘制指定的椭圆,它恰好能放进一个由x,y,width,height参数指定的矩形中,椭圆覆盖的区域宽度为width+1,长度为height+1
void fillRect(int x,int y,int width,int height) 用当前颜色填充指定矩形,该矩形左边缘和右边缘分别位于x,x+width-1,上边缘和下边缘分别位于y,y+height-1
void fillOval(int x,int y,int width,int height) 用当前颜色填充指定椭圆,该椭圆左边缘和右边缘分别位于x,x+width-1,上边缘和下边缘分别位于y,y+height-1
void drawString(String str,int x,int y) 使用此图形上下文的颜色填充指定的文本str,最左侧字符左下角位于(x,y)坐标

下面是一个图片验证码的例子,代码如下:

import java.awt.*;
import java.awt.event.*;
import java.util.Random;

public class Main{
	public static void main(String[] args)throws Exception{
        final Frame f=new Frame("验证码");
        f.addWindowListener(new WindowAdapter(){//为窗口注册监听器,实现窗口关闭功能
        	public void windowClosing(WindowEvent e){
        		f.dispose();
        	}
        });
        final Panel p=new MyPanel();
        
        f.add(p);
        f.setSize(200, 100);
        f.setLocationRelativeTo(null);//将窗口f居中
        f.setVisible(true);
	}
}
class MyPanel extends Panel{
	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);//绘制边框
		
		//绘制干扰点
		Random r=new Random();
		for(int i=0;i<100;i++){
			int x=r.nextInt(width)-2;
			int y=r.nextInt(height)-2;
			g.drawOval(x, y, 2, 2);
		}
		
		g.setFont(new Font("黑体",Font.BOLD,30));
		g.setColor(Color.BLUE);
		
		//产生随机数字
		char[] chars=("0123456789zxcvbnmasdfghjklpoiuytrewq"+"ZXCVBNMKJLHGFDSAQWERTYUIOP").toCharArray();
		StringBuilder sb=new StringBuilder();
		for(int i=0;i<4;i++){
			int pos=r.nextInt(chars.length);
			char c=chars[pos];
			sb.append(c+" ");
		}
		
		//写入随机验证码
		g.drawString(sb.toString(), 20, 30);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_40788630/article/details/82345056