• Java验证码程序


    1、设计思想
    利用random的随机生成数字,利用for循环控制随机数字的个数来控制验证码的输出。
    利用JFrame实现布局的管理,对登录框内容的位置进行管理。

    2、流程图

    3、源代码

    denglu类

    import javax.swing.*;
    import java.awt.*;
    import javax.swing.JFrame;
    public class denglu extends JFrame{
    JTextField jTextField; //定义文本框组件
    JPasswordField jPasswordField; //定义密码框组件
    JTextField jYanzhengField;//定义验证码框架组件
    JLabel jl1,jl2,jl3; //用户名 密码
    JButton jb1,jb2; //按钮
    JPanel jp1,jp2,jp3,jp4,jp5; //边框
     public  denglu(){
      // 创建组件
      jTextField=new JTextField(10);
      jPasswordField=new JPasswordField(10);
      jYanzhengField=new JTextField(5);
      
      jb1=new JButton("登录");
      jb2=new JButton("快速注册");
      
      jl1=new JLabel("登录名");
      jl2=new JLabel("密   码");
      jl3=new JLabel("验证码");
      
      jp1=new JPanel();
      jp2=new JPanel();
      jp3=new JPanel();
      jp4=new JPanel();
      
      //设置布局
      JFrame jf = new JFrame();
      jf.setLayout(new GridLayout(5,2));
      
      jp1.add(jl1);
      jp1.add(jTextField);// 第一块面板 文本框和用户名
      
      jp2.add(jl2);
      jp2.add(jPasswordField);// 第二块面板 文本框和密码
      
      jp3.add(jl3);
      jp3.add(jYanzhengField);// 第三块面板 文本框和验证码
      
      jp4.add(jb1);
      jp4.add(jb2);// 第四块面板 登入 快速注册
      
      jf.add(jp1);
      jf.add(jp2);
      jf.add(jp3);
      jf.add(jp4);
      //将四块面板添加到登录框上
      
      //设置框架
      jf.setTitle("登录");
      jf.setSize(400, 300);
      jf.pack();
      Dimension screen = getToolkit().getScreenSize();
      jf.setLocation((screen.width-getWidth())/2, (screen.height-getHeight())/2);
      jf.setDefaultCloseOperation(EXIT_ON_CLOSE);
      jf.setVisible(true);
      
     }


    }

    yanzheng类

    import java.awt.*;
    import java.util.Random;
    import javax.swing.JFrame;
    public class yanzheng extends JFrame {
    private static Random random = new Random();
    private String code = "";//保存验证码
     public yanzheng(){//初始化窗体信息
      super("验证码");
      setVisible(true);
      setBounds((Toolkit.getDefaultToolkit().getScreenSize().width-300)/2, (Toolkit.getDefaultToolkit().getScreenSize().height-300)/2, 300, 200);
      setDefaultCloseOperation(EXIT_ON_CLOSE);
     }
     public String randomcode(){//获得验证码
      String code="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
      Random random=new Random();
      StringBuffer s=new StringBuffer();
      int num =random.nextInt(62);
      sb.append(code.charAt(num));
      return s.toString();
     }

     public void checkcode(Graphics a){// 设置验证码
      drawCode(a);
     }
     public void drawCode(Graphics a){//设置验证码内容
      for(int i=0;i<6;i++){
      a.setFont(new Font("宋体",Font.BOLD,20));
      a.drawString(randomcode(), 50+(i*12),70);
      }
     }
     public void paint(Graphics a) {
      checkcode(a);
     }

    // 实现
     public static void main(String[] args) {
       // TODO Auto-generated method stub
        new yanzheng();
        new denglu();
        
      }
     }

    4、程序截图

                                                 

    5、实验总结

    验证码:
      利用random生成的随机数只能是int类型,不能是字符类型。
      在绘制验证码图片时,用Graphics类传输paint绘画随机数字。
    登录界面设计:
      用JFrame的布局管理
      标签组件:JLabel   按钮组件:JButton
      字体设置:Font font=new Font("隶书",Font.ITALIC+Font.BOLD,28);
      GridLayout布局管理器是以表格形式进行管理的,在使用此布局管理器时必须设置显示的行数与列数
      JFrame类是一个容器,允许程序员把其他组件添加到它里面,把它们组织起来,并把它们呈现给用户。 。
      JFrame jf=new JFrame("");//进行实例化窗体对象
      使用Dimension类设置窗体的大小:getSize()和setSize(Dimension size),分别用来获得和设置方格的大小。
    遇到的问题:用StringBuffer code="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";不能生成随机字符型而是全部输出

      改为    String code="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
       Random random=new Random();
       StringBuffer s=new StringBuffer();
       int num =random.nextInt(62);
       s.append(code.charAt(num));
       return sb.toString();
    验证能成功输出

  • 相关阅读:
    降维
    latex 中文
    Java基础——通信
    Java基础——文件读取
    Java基础——哈弗曼树的Java实现(构建、遍历输出、哈弗曼编码)
    Java基础——表达式二叉树的Java实现构建(构建+前序、中序、后序遍历)
    MYSQL和ORACLE的一些区别
    快速排序
    冒泡排序
    希尔排序
  • 原文地址:https://www.cnblogs.com/liulala2017/p/7637331.html
Copyright © 2020-2023  润新知