点击验证码图片可以更换验证码,输入完成后点击确定按钮,可以判断验证码输入是否正确,效果如下图所示:
输入错误时(程序会清空输入框中的字符):
正确时(不清空验证码输入框):
验证码图片生成类代码如下 :
package basicValidcode;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random;
public class Createvalidcode {
// 存放获取的四个随机字符
private String validcode_char = "";
// 下一个验证码
private boolean is_nextvalidcode = false;
// 从这些字符中抓取显示的4个验证码字符
String str_char = "qwertyuiopasdfghjklzxcvbnm1234567890QWERTYUIOPASDFGHJKLZXCVBNM";
char[] charArray = str_char.toCharArray();
// 根据index索引,随机抓取4个字符
Random random = new Random();
public BufferedImage createImage() {
// 创建图片缓冲区
BufferedImage bf_image = new BufferedImage(80, 26,BufferedImage.TYPE_INT_RGB);
// 获取画笔对象
Graphics g = bf_image.getGraphics();
// 设置画笔
g.setColor(Color.GRAY);
g.fillRect(0, 0, 80, 26);//填充矩形
for(int i = 0;i<4;i++) {
g.setColor(new Color(random.nextInt(252), random.nextInt(215), random.nextInt(192)));
g.setFont(new Font("楷体", Font.BOLD, 26));
// 建立字符索引,以此来获得不同字符
int index = 0;
if(!is_nextvalidcode) {
index = random.nextInt(str_char.length());
}else {
index = (random.nextInt(str_char.length()+5)%str_char.length());
}
String str = charArray[index]+"";
g.drawString(str, i*13+13, 24);
//将四个单独的随机字符用空字符("")连接起来,得到4个字符的验证码
setValidcode_char(getValidcode_char() + str);
}
return bf_image;
}
// 生成下一个验证码
public void nextvalidcode() {
setValidcode_char("");
is_nextvalidcode = true;
}
public String getValidcode_char() {
return validcode_char;
}
public void setValidcode_char(String validcode_char) {
this.validcode_char = validcode_char;
}
}
窗口界面代码如下(包含验证码的输入判断):
package basicValidcode;
import java.awt.EventQueue;
import javax.swing.ImageIcon;
import javax.swing.Jframe;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Toolkit;
import java.awt.Font;
import java.awt.Color;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class loginForm extends Jframe {
private static final long serialVersionUID = 1L; private JPanel contentPane; private JTextField textField;
// 生成验证码图片
Createvalidcode validcode;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
loginForm frame = new loginForm();
frame.setResizable(false);//窗口大小不可更改
frame.setLocationRelativeTo(null);//窗体在屏幕中居中显示
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public loginForm() {
setForeground(Color.DARK_GRAY);
setFont(new Font("Dialog", Font.BOLD, 11));
setIconImage(Toolkit.getDefaultToolkit().getImage("C:\Users\huashi\Pictures\白衣天使.png"));
setTitle("简易验证码实现");
setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
setBounds(100, 100, 368, 272);
contentPane = new JPanel();
contentPane.setOpaque(false);
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JLabel jlb_validcode = new JLabel("验证码");
jlb_validcode.setForeground(new Color(255, 140, 0));
jlb_validcode.setFont(new Font("宋体", Font.ITALIC, 17));
jlb_validcode.setLabelFor(this);
jlb_validcode.setBounds(56, 89, 53, 20);
contentPane.add(jlb_validcode);
textField = new JTextField();
textField.setBounds(119, 87, 114, 26);
contentPane.add(textField);
textField.setColumns(10);
validcode = new Createvalidcode();
JLabel jlb_validcodeImage = new JLabel(new ImageIcon(validcode.createImage()));
jlb_validcodeImage.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
validcode.nextvalidcode();
jlb_validcodeImage.setIcon(new ImageIcon(validcode.createImage()));
}
});
jlb_validcodeImage.setBounds(243, 87, 58, 26);
contentPane.add(jlb_validcodeImage);
JButton btn_yes = new JButton("确 定 ");
btn_yes.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(is_validcode()) {
JOptionPane.showMessageDialog(null, "验证码输入正确","提示消息",JOptionPane.WARNING_MESSAGE);
}else {
JOptionPane.showMessageDialog(null, "验证码输入错误,请重新输入!!!","提示消息",JOptionPane.WARNING_MESSAGE);
textField.setText("");
}
}
});
btn_yes.setForeground(new Color(255, 127, 80));
btn_yes.setFont(new Font("宋体", Font.BOLD, 17));
btn_yes.setBounds(120, 166, 97, 30);
contentPane.add(btn_yes);
JLabel jlb_title = new JLabel("验证码生成");
jlb_title.setForeground(new Color(255, 140, 0));
jlb_title.setFont(new Font("幼圆", Font.BOLD, 17));
jlb_title.setBounds(129, 20, 87, 20);
contentPane.add(jlb_title);
// 背景图片设置
JLabel lblNewLabel = new JLabel("");
lblNewLabel.setIcon(new ImageIcon(“C:UsershuashiDesktopbackground2.jpg”));
lblNewLabel.setBounds(0, 0, 354, 225);
contentPane.add(lblNewLabel);
}
public boolean is_validcode() {
if(textField.getText().equals(validcode.getValidcode_char())) {
return true;
}
return false;
}
}
虽然很简单,但是我还是希望你自己跟着敲一遍代码,成功后自己在自己从头开始自己敲一遍,这样可以加深对验证码生成的理解。



