9.27
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)); // 运行应用程序
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!