首页 > 其他分享 >9.27

9.27

时间:2024-09-27 23:34:58浏览次数:1  
标签:9.27 验证码 private 输入框 new refreshButton panel

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));  // 运行应用程序  
}  

}

标签:9.27,验证码,private,输入框,new,refreshButton,panel
From: https://www.cnblogs.com/lala-la/p/18436798

相关文章

  • 9.27日
    • 枚举类型是一种特殊的类,它不是原始数据类型。• 使用==比较两个枚举变量时,只有当它们指向同一个枚举常量时才返回true。• 枚举类型提供了valueOf方法,可以将字符串转换为对应的枚举常量。• 枚举类型的values()方法可以返回一个包含所有枚举常量的数组,便于遍历所有......
  • 华为9.27笔试
    第一题给出员工(\(n\leq100\))和对应的亲属关系,询问能否将其分为两个组合,要求亲属不在同一侧。要求两个组合中第一个数尽量小。一眼并查集,即员工i的亲属属于同一个集合,生成一个集合编号j。记录员工i以及与之互斥的点,用于后续获取员工i互斥的集合编号j。由于要求组合中第一......
  • 2024.9.27
    枚举定义:定义了一个名为Size的枚举,包含三个常量:SMALL、MEDIUM和LARGE。枚举常量比较:s==t比较Size.SMALL和Size.LARGE,结果为false,因为它们是不同的枚举常量。检查是否为原始类型:s.getClass().isPrimitive()返回false,表明枚举类型不是原始类型,而是对象。使......
  • 9.27
    因为昨天部署成功服务器,所以把云服务器关机了,但是当我再重启时,更换了公网IP,再进行重新打包时,前端便库库报错,这次搞了好久才搞好,所以总结一下前后端都需要改哪里。前端1、部署在云服务器上的前后端通信时,前端向后端通信时需要的是公网IP。 2、部署时需要修改nginx的配置......
  • 【2024.09.27】NOIP2024 赛前集训-刷题训练(3)
    【2024.09.27】NOIP2024赛前集训-刷题训练(3)「NOIP2018提高组」铺设道路算法一:模拟正常人铺路的过程,每次找区间的最小值,最小值就是本次填的高度,由于出现了若干个0位置,就分裂成若干个子区间去重复上述过程,直到全部变成0。时间复杂度\(O(nlogn)\),瓶颈在预处理st表。算法二:若......
  • 9.27
    1、枚举类型:可以使用“==”和equals()方法直接比对枚举变量的值,是引用类型。2、反码、补码和原码:原码,有符号位和数值部分,0为整数,1为负数。10000101为-5。反码,正数反码与原码相同,负数反码在原码的基础上符号位保持为1,数值部分取反。11111010为-5反码。补码,正数不变,负数为反码加1.11......
  • 2024.9.27校测
    T1题目描述\(Mr.Hu\)开了个饭店,来了两位客人:\(Alice\)和\(Bob\),他们吃完饭要结账时,发现他们需要支付\(c\)元钱,但是\(Alice\)只有面值为\(a\)的钱,\(Bob\)只有面值为\(b\)的钱(他们每个人的钱的和都大于\(c\),即可以认为他们有无数张对应面值钱)。现在,\(Mr.Hu\)想知......
  • 2024.9.27
    今天一节课都没去上。反正计概不如自学一点,旷掉也无所谓,感觉。这个比haskell还是有点难绷的,不太懂它都实现了些什么。他要能讲点用这个分析复杂度之类的那还好,但现在的问题是上不去下不来卡在这里了。无论如何把计概作业写了就行。顺便把数算的mooc做了,你12个题我怎么......
  • 9.27 模拟赛(NOIP十三连测 #10)
    2024--梦熊&太戈--NOIP十三连测#10【订正】-比赛-梦熊联盟(mna.wang)复盘开T1。差分转化。模拟了一下样例感觉方案好像是唯一确定的,不需要贪心/DP。但不太能证。想了会感觉找不出反例。然后写完了。对拍没挂。用时不到\(30\)分钟。T2。\(m\le20\)且数据随机感觉很......
  • VMware安装Ubuntu操作系统 2024.9.27
    1.安装Ubuntu的官方网站是:https://www.ubuntu.com/download点进去可以直接下载文件下载会比较慢,我这点用了约5分钟然后就可以打开vmware,选择:就可以注册和使用了。笔记本电脑是这样的。。如果使用台式机,没有相应的硬件环境的话,就不要创建空的盘符了,就可以创建和导入镜像文......