//导入Java类库
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Random;
//验证码类设计
public class Valid_code extends JFrame implements ActionListener {
int t;
Container content;
JLabel lbl_user,lbl_pass,lbl_check;//标签
JTextField txt_user,txt_pass,txt_check;//文本输入框
JButton btn_ok,btn_exit;//操作按钮
JLabel lbl_code[]=new JLabel[4];//标签控件数组
String str_valid_code;//验证码字符串
//验证码允许字符
char [] codeSequence={'A','B','C','D','E','F','G','H','T','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9','0'};
public Valid_code(){
//设置窗口属性
super("登陆窗口");//窗口标题
setSize(200,250);//窗口大小
content=getContentPane();
content.setLayout(null);
//用户名
lbl_user=new JLabel("用户名",JLabel.CENTER);
lbl_user.setBounds(0,0,50,50);
txt_user=new JTextField();
txt_user.setBounds(60,10,100,30);
//密码
lbl_pass=new JLabel("密码",JLabel.CENTER);
lbl_pass.setBounds(0,50,50,50);
txt_pass=new JPasswordField();
txt_pass.setBounds(60,60,100,30);
//验证码
lbl_check=new JLabel("验证码",JLabel.CENTER);
lbl_check.setBounds(0,100,50,50);
txt_check=new JTextField();
txt_check.setBounds(60,110,100,30);
//生成验证码控件数组
for(int i=0;i<4;i++){
lbl_code[i]=new JLabel();
}
//调用生成验证码方法
draw_code();
//按钮
btn_ok=new JButton("确定");
btn_ok.setBounds(20,185,60,30);
btn_ok.addActionListener(this);
btn_exit=new JButton("退出");
btn_exit.setBounds(100,185,60,30);
btn_exit.addActionListener(this);
//将组件加入到内容窗格
content.add(lbl_user);
content.add(txt_user);
content.add(lbl_pass);
content.add(txt_pass);
content.add(lbl_check);
content.add(txt_check);
content.add(btn_ok);
content.add(btn_exit);
//验证码控件数组加入内容窗格
for(int i=0;i<lbl_code.length;i++){
content.add(lbl_code[i]);}
//窗口居中,窗口大小不可变
setLocationRelativeTo(null);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
//生成验证码方法
public void draw_code(){
//创建一个随机数生成器类
Random random=new Random();
StringBuffer randomCode=new StringBuffer();
int red=0,green=0,blue=0;
//随机产生验证码
for(int i=0;i<4;i++){
//得到随机产生的验证码数字
String strRand=String.valueOf(codeSequence[random.nextInt(36)]);
//产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同
red=random.nextInt(255);
green=random.nextInt(255);
blue=random.nextInt(255);
//用随机产生的颜色将验证码绘制到图像中
lbl_code[i].setForeground(new Color(red,green,blue));
lbl_code[i].setText(strRand);
lbl_code[i].setBounds(i*20+60,160,20,20);
randomCode.append(strRand);
//将四位数字的验证码保存到属性中
str_valid_code=randomCode.toString();
}
}
//事件处理方法
public void actionPerformed(ActionEvent e){
//获得事件源
Object obj=e.getSource();
//操作处理
if (obj.equals(btn_ok))
{
//演示数据以用户名为xingchen,密码为52670作为合法用户
if(txt_user.getText().equals("xingchen")&&txt_pass.getText().equals("52670")&&txt_check.getText().equals(str_valid_code))
{
JOptionPane.showMessageDialog(this,"您是合法用户,欢迎使用本系统!","提示",JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
}
else{
t++;
if(!txt_user.getText().equals("xingchen")&&!txt_user.getText().equals(""))
JOptionPane.showMessageDialog(this,"无此用户!","提示",JOptionPane.INFORMATION_MESSAGE);
else if(!txt_pass.getText().equals("52670")&&!txt_pass.getText().equals(""))
JOptionPane.showMessageDialog(this,"密码不正确!","提示",JOptionPane.INFORMATION_MESSAGE);
else if(txt_user.getText().equals("")||txt_pass.getText().equals(""))
{
JOptionPane.showMessageDialog(this,"用户名和密码不能为空!","提示",JOptionPane.INFORMATION_MESSAGE);
draw_code();
}
else if(!txt_check.getText().equals(str_valid_code))
JOptionPane.showMessageDialog(this,"验证码不正确!","提示",JOptionPane.INFORMATION_MESSAGE);
//界面信息初始化
txt_user.setText("");
txt_pass.setText("");
txt_check.setText("");
txt_user.requestFocus();
//重新生成验证码
draw_code();
}
if(t>2)
{JOptionPane.showMessageDialog(this,"输入三次错误!","提示",JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
}
}
if (obj.equals(btn_exit)){
this.dispose();//关闭窗口
System.exit(0);//退出应用
}
}
public static void main(String args[]){
Valid_code v=new Valid_code();
}
}