java验证图片

未加入图片,可以将图片按自己需要加入
在这里插入图片描述

import java.awt.Container;

import java.awt.Font;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.ArrayList;

import java.util.List;

import java.util.Random;



import javax.swing.*;



public class Cap12306 extends JFrame {
    
    

    JLabel[] jlCap = new JLabel[5];// 创建显示验证图标签数组

    JCheckBox[] jcb = new JCheckBox[jlCap.length];// 创建复选框组件数组

    JLabel jl;// 定义选择提示标签

    String capRanName;// 定义要选择的验证图类别

    int[] num = new int[jlCap.length];// 定义随机数变量数组

    public static List<Capurl> cap12306list = new ArrayList<Capurl>();



    public Cap12306() {
    
    // 构造方法初始化窗体

        setTitle("图形验证码");// 窗体标题

        setSize(500, 260);// 窗体大小

        setLocationRelativeTo(null);// 窗体居中

        setVisible(true);// 窗体可见

        setDefaultCloseOperation(EXIT_ON_CLOSE);// 关闭方式

        Container c = getContentPane();// 获取容器

        c.setLayout(null);// 设置绝对布局

        Font font = new Font("仿宋", Font.BOLD, 15);// 统一设置字体



        this.jl = new JLabel();// 新增提示标签

        this.jl.setBounds(10, 10, 220, 19); // 设置位置及大小

        this.jl.setFont(font);

        c.add(jl);// 向容器添加组件

        for (int i = 0; i < jlCap.length; i++) {
    
    

            this.jlCap[i] = new JLabel();// 验证图标签

            this.jlCap[i].setBounds(10 + i * 93, 40, 88, 88);

            c.add(jlCap[i]);

            this.jcb[i] = new JCheckBox("选择");// 复选框标签

            this.jcb[i].setBounds(25 + i * 93, 140, 70, 30);

            this.jcb[i].setFont(font);

            c.add(jcb[i]);

        }

        changeCap();// 设置5张随机验证图和要选择的验证图类别



        JButton enter = new JButton("确认");// 确认按钮

        enter.setFont(font);

        enter.setBounds(240, 180, 70, 26);

        c.add(enter);

        JButton change = new JButton("换一组");

        change.setFont(font);

        change.setBounds(340, 180, 85, 26); // 更换验证图按钮

        c.add(change);



        change.addActionListener(new ActionListener() {
    
    // 更换验证图按钮触发事件

            @Override

            public void actionPerformed(ActionEvent args) {
    
    

                changeCap();

            }

        });



        enter.addActionListener(new ActionListener() {
    
    // 确定按钮触发事件匿名内部类

            @Override

            public void actionPerformed(ActionEvent args) {
    
    

                if (ifCap()) {
    
    // 验证图勾选正确则弹出正确对话框,否则弹出错误对话框

                    JOptionPane.showMessageDialog(null, "验证通过,将进入系统!", "图形验证码", JOptionPane.WARNING_MESSAGE);

                    System.exit(0);// 退出程序

                } else {
    
    

                    JOptionPane.showMessageDialog(null, "验证失败,请重新验证!", "图形验证码", JOptionPane.ERROR_MESSAGE);

                    changeCap();// 更换验证图

                }

            }

        });

    }



    public boolean hasRan(int c, int ran) {
    
    // 判断随机数是否重复方法

        for (int i = 0; i < c; i++) {
    
    

            if (num[i] == ran) {
    
    

                return true;// 有重复

            }

        }

        return false;// 不重复

    }



    public void changeCap() {
    
    // 更换验证图方法

        Random random = new Random();

        for (int i = 0; i < num.length; i++) {
    
    

            int ran = random.nextInt(cap12306list.size());

            while (hasRan(i, ran)) {
    
    

                ran = random.nextInt(cap12306list.size());

            }

            num[i] = ran;

            Capurl capurl = cap12306list.get(num[i]);

            this.jlCap[i].setIcon(capurl.iconUrl);// 重新设置验证图

            this.jcb[i].setSelected(false);

        }

        int ran = num[random.nextInt(num.length)];// 5张验证图中随机抽取一张

        capRanName = cap12306list.get(ran).name;

        jl.setText("请点击下面图中 所有的" + capRanName);// 更新提示信息

    }



    public boolean ifCap() {
    
    // 验证勾选验证图是否正确

        for (int i = 0; i < num.length; i++) {
    
    

            if (cap12306list.get(num[i]).name.equals(capRanName)) {
    
    

                if (!jcb[i].isSelected()) {
    
    

                    return false;// 应勾选未勾选

                }

            } else {
    
    

                if (jcb[i].isSelected()) {
    
    

                    return false;// 勾选了不应勾选的

                }

            }

        }

        return true;// 全部勾选正确

    }



    public static void iniList(String name, int c) {
    
    // 初始化验证图信息

        for (int i = 1; i <= c; i++) {
    
    

            cap12306list.add(new Capurl(name, "img_cap12306/" + name + '/' + name + i + ".png"));

        }

    }



    public static void main(String[] args) {
    
    

        iniList("本子", 6);// 批量添加验证图信息

        iniList("蜡烛", 6);

        iniList("礼花", 6);

        iniList("牌坊", 6);

        iniList("塔", 6);

        iniList("跳绳", 6);

        iniList("土豆", 6);

        iniList("钟", 6);

        new Cap12306();

    }

}



class Capurl {
    
    // 用来存储验证图类别和地址的类

    String name;

    Icon iconUrl;



    Capurl(String name, String url) {
    
    

        this.name = name;

        this.iconUrl = new ImageIcon(url);

    }

}



  • 作者:麦克猫Cat
  • 本文版权归作者和CSDN共有,欢迎交流

猜你喜欢

转载自blog.csdn.net/weixin_52309367/article/details/121063857
今日推荐