用Java制作一个简单的图片验证程序(Java练手小项目)

1.项目效果演示:

1.验证界面:

2.验证成功界面:

3.验证失败界面:

简单介绍:实现每次运行出现四个随机字符提供给用户验证,点击确定按钮,如果验证码正确,则会提示验证成功,否则,则出现验证失败。

2.下面我们来说说程序建立,先建一个Java项目,然后建一个file文件夹,里面放随机生成的照片,命名为aaa.jpg,还有在src下建立一个po.ak.com的包,包里有五个Java类。

3.下面是五个Java类的代码:

1.Images.java

package po.ak.com;

import javax.swing.*;
import java.io.File;
import java.net.URI;
import java.net.URL;

public class Images {
    //将图片的路径先封装为对象:
    public static URI yzURL = new File("file", "aaa.jpg").toURI();

    //通过这个路径,再将图片封装为对象:
    public static ImageIcon yzImg = new ImageIcon( new File("file", "aaa.jpg").getAbsolutePath());
}

 2.Test_1.java

package po.ak.com;

import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.swing.*;

public class Test_1 {
    //定义一个数组并赋值
	static String[] strs = {"a","b","c","d","e","f","g","2","3","4","5","6"};

	public static void main(String[] args) throws IOException {
		//定义图片的宽度
		int w = 500;

		//定义图片的高度
		int h = 150;

		//定义一个数组来储存
		String[] str1 = new String[5];

		//生成一张图片
		BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);

		//获取画笔对象
		Graphics g = image.getGraphics();

		//设置字体颜色
		g.setFont(new Font("宋体",Font.PLAIN,100));

		//设置画笔颜色
		g.setColor(Color.yellow);

		//画一个填充矩形
		g.fillRect(0, 0, w, h);

		//使用Random类
		Random random =new Random();

		//定义字体大小
		int x = 80;
		int y = 115;

		//for循环
		for(int i = 0 ; i < 4 ; i++) {
			//生成一个随机数
			int num = random.nextInt(strs.length-1);

			//每循环一次获取一个
			String str = strs[num];

			//获取每次生成的字符
			str1[i] = str;

			//重新设置画笔颜色
			g.setColor(Color.red);

			//在图片上画一个字符串
			g.drawString(str, x, y);

			//设置四个字符之间的距离
			x += 100;

		}

		//获取生成的字符串
		String str2 = str1[0]+str1[1]+str1[2]+str1[3];

		//重新设置颜色
		g.setColor(Color.GREEN);

		//设置坐标
		for(int i=0;i<8;i++) {

			int x1 = random.nextInt(60);
			int y1 = random.nextInt(130);

			int x2 = random.nextInt(30)+450;
			int y2= random.nextInt(130);

			//画一些干扰线
			g.drawLine(x1, y1, x2, y2);

		}

		//保存至本地磁盘上
		try {
			File file = new File("file", "aaa.jpg");
			if(!file.getParentFile().exists()) {
				file.getParentFile().mkdirs();
			}
			ImageIO.write(image, "jpg",file);
		} catch (IOException e) {
			e.printStackTrace();
		}

		//创建一个对象
		Test_3 ks=new Test_3();

		//创建一个窗体:窗体类的具体的对象:
		JFrame jf = new JFrame();
		Container rq = jf.getContentPane();
		rq.setLayout(new BorderLayout());

		//给窗体设置一个标题:
		jf.setTitle("用户验证");

		//求出屏幕的宽度:
		int width = Toolkit.getDefaultToolkit().getScreenSize().width;

		//求出屏幕的高度:
		int height = Toolkit.getDefaultToolkit().getScreenSize().height;

		JPanel panel2 = new JPanel();
		panel2.setBorder(BorderFactory.createTitledBorder("panel2"));

		//设置初始窗体大小
		jf.setBounds((width - 900)/2,(height - 780)/2,900,780);

		//让窗体的大小不可以改变:
		jf.setResizable(false);

		//点击窗体的×的时候,程序跟着停止运行:
		jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

		rq.add(panel2,BorderLayout.SOUTH);
		panel2.setBounds(301,501,300,80);
		JTextField input = new JTextField(30);

		//创建一个按钮
		JButton but1 = new JButton("确定");
		JPanel panel = new JPanel();
		JLabel label1 = new JLabel("验证码:");
		panel.add(label1);
		panel.add(input);
		panel.add(but1);
		jf.add(ks);
		panel2.add(panel);
		jf.setVisible(true);

		//创建一个按钮监听
		but1.addMouseListener(new MouseListener() {

			//判断是否对其进行操作
			public void mouseClicked(MouseEvent e) {

				//获取用户输入的内容
				String content = input.getText();

				if(str2.equals(content)){
					Test_2 g = new Test_2();
					g.start();
				}

				else {
					Test_4 g = new Test_4();
					g.start();
				}
			}
			public void mousePressed(MouseEvent e) {

			}
			public void mouseReleased(MouseEvent e) {

			}
			public void mouseEntered(MouseEvent e) {

			}
			public void mouseExited(MouseEvent e) {

			}
		});

	}

}

3.Test_2.java

package po.ak.com;

import javax.swing.*;
import java.awt.*;

public class Test_2 {
    public void start() {
        //创建一个窗体
        JFrame jf = new JFrame();

        //给窗体设置一个标题
        jf.setTitle("温馨提示");

        //求出屏幕的宽度
        int width = Toolkit.getDefaultToolkit().getScreenSize().width;

        //求出屏幕的高度
        int height = Toolkit.getDefaultToolkit().getScreenSize().height;

        //设置初始窗体大小
        jf.setBounds((width - 250)/2,(height - 100)/2,250,100);

        //让窗体的大小不可以改变:
        jf.setResizable(false);

        //点击窗体的×的时候,程序跟着停止运行:
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        //点完按钮后出现的提示信息
        JButton but1 = new JButton("验证成功");

        //把按钮加到窗体上
        jf.add(but1);

        //设置窗口可见
        jf.setVisible(true);
    }
}

4.Test_3.java

package po.ak.com;

import javax.swing.*;
import java.awt.*;

public class Test_3 extends JPanel {
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        //设置面板的背景颜色:
        this.setBackground(new Color(166, 211, 234));

        //插入一个头部图片:
        Images.yzImg.paintIcon(this,g,195,80);

        //将画笔的颜色改变一下:
        g.setColor(new Color(171, 173, 171, 255));
    }

}

5.Test_4.java

package po.ak.com;

import javax.swing.*;
import java.awt.*;

public class Test_4 {
    public void start() {
        //创建一个窗体
        JFrame jf = new JFrame();

        //给窗体设置一个标题
        jf.setTitle("温馨提示");

        //求出屏幕的宽度
        int width = Toolkit.getDefaultToolkit().getScreenSize().width;

        //求出屏幕的高度
        int height = Toolkit.getDefaultToolkit().getScreenSize().height;

        //设置初始窗体大小
        jf.setBounds((width - 250)/2,(height - 100)/2,250,100);

        //让窗体的大小不可以改变:
        jf.setResizable(false);

        //点击窗体的×的时候,程序跟着停止运行:
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        //点完按钮后出现的提示信息
        JButton but1 = new JButton("验证失败");

        //把按钮加到窗体上
        jf.add(but1);

        //设置窗口可见
        jf.setVisible(true);
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值