package information;

import javax.swing.;
import java.awt.
;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.util.Random;

public class LoginWithCaptcha extends JFrame {

private JTextField usernameField;  // 用户名输入框  
private JPasswordField passwordField;  // 密码输入框  
private JTextField captchaField;  // 验证码输入框  
private JLabel captchaLabel;  // 用于显示验证码的标签  
private String captchaString;  // 验证码字符串  

public LoginWithCaptcha() {  
    this.setTitle("登录界面");  // 设置窗口标题  
    this.setSize(400, 300);  // 设置窗口尺寸  
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  // 设置关闭操作  
    this.setLocationRelativeTo(null);  // 窗口居中显示  

    createUI();  // 创建用户界面  
    generateAndSetCaptchaImage();  // 生成并设置初始验证码图像  
}  

private void createUI() {  
    JPanel panel = new JPanel();  
    panel.setLayout(new GridLayout(5, 2));  // 使用网格布局  
    panel.setBackground(new Color(173, 216, 230)); // 设置背景颜色  

    addComponentsToPanel(panel);  // 将组件添加到面板  
    this.add(panel);  // 将面板添加到窗口  
}  

private void addComponentsToPanel(JPanel panel) {  
    panel.add(new JLabel("账号:"));  // 添加账号标签  
    usernameField = new JTextField();  // 创建用户名输入框  
    panel.add(usernameField);  // 将用户名输入框添加到面板  

    panel.add(new JLabel("密码:"));  // 添加密码标签  
    passwordField = new JPasswordField();  // 创建密码输入框  
    panel.add(passwordField);  // 将密码输入框添加到面板  

    panel.add(new JLabel("验证码:"));  // 添加验证码标签  
    captchaField = new JTextField();  // 创建验证码输入框  
    panel.add(captchaField);  // 将验证码输入框添加到面板  

    captchaLabel = new JLabel();  // 创建验证码显示标签  
    panel.add(captchaLabel);  // 将验证码标签添加到面板  

    JButton refreshButton = createRefreshButton();  // 创建刷新按钮  
    panel.add(refreshButton);  // 将刷新按钮添加到面板  
}  

private JButton createRefreshButton() {  
    JButton refreshButton = new JButton("刷新");  // 创建刷新按钮并设置文本  
    refreshButton.setFont(new Font("Sans Serif", Font.BOLD, 14));  // 设置按钮字体  
    refreshButton.setBackground(Color.WHITE);  // 设置按钮背景颜色  
    refreshButton.setForeground(Color.BLACK); // 设置按钮字体颜色为黑色  

    // 设置按钮的边距  
    refreshButton.setFocusPainted(false);  // 去掉按钮焦点边框  
    refreshButton.setBorder(BorderFactory.createEmptyBorder(10, 20, 10, 20)); // 添加内边距  

    // 添加按钮点击事件监听器  
    refreshButton.addActionListener(new ActionListener() {  
        public void actionPerformed(ActionEvent e) {  
            generateAndSetCaptchaImage();  // 点击按钮时生成新的验证码图像  
        }  
    });  

    return refreshButton;  // 返回创建的刷新按钮  
}  

private void generateAndSetCaptchaImage() {  
    captchaString = generateRandomCaptcha();  // 生成随机验证码  
    BufferedImage captchaImage = new BufferedImage(200, 100, BufferedImage.TYPE_INT_RGB);  // 创建验证码图像  
    Graphics g = captchaImage.getGraphics();  // 获取图形上下文  
    g.setColor(Color.WHITE);  // 设置背景色为白色  
    g.fillRect(0, 0, 200, 100);  // 填充背景  
    g.setColor(Color.BLACK); // 设置验证码字体颜色
    g.setFont(new Font("Sans Serif", Font.PLAIN, 40));   // 设置字体样式和大小  
    g.drawString(captchaString, 20, 60);  // 在图像上绘制验证码字符串  
    g.dispose();  // 释放图形上下文资源  
    captchaLabel.setIcon(new ImageIcon(captchaImage));  // 设置验证码图像到标签  
}  

private String generateRandomCaptcha() {  
    // 定义可用字符(大写字母、小写字母和数字)  
    String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";   
    Random random = new Random();  // 创建随机数生成器  
    StringBuilder captcha = new StringBuilder();  // 创建字符串构造器来存储验证码  
    
    for (int i = 0; i < 4; i++) { // 生成4位验证码  
        int index = random.nextInt(chars.length());  // 生成随机索引  
        captcha.append(chars.charAt(index));  // 根据随机索引选择字符并附加到验证码  
    }  
    return captcha.toString();  // 返回生成的验证码字符串  
}  

public static void main(String[] args) {  
    SwingUtilities.invokeLater(() -> new LoginWithCaptcha().setVisible(true));  // 运行应用程序  
}  

}

 posted on 2024-09-28 10:13  敝屣  阅读(1)  评论(0编辑  收藏  举报