23.9.16(Java版登录界面)


// An addition program

import javax.swing.JOptionPane; // import class JOptionPane
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 Singin {
private static final String[] CAPTCHA_CHARACTERS = {"A", "B", "C", "D", "E", "F", "G", "H", "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 static void main(String[] args) {
JFrame frame = new JFrame("登录");//创建一个页面,标题为登录
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//用户关闭窗口,程序自动终止运行
frame.setSize(400, 300);

JPanel panel = new JPanel();
panel.setLayout(new GridLayout(6, 3));//将面板分为6行3列的网格,共可以储存18个组件

JLabel usernameLabel = new JLabel(" 用户名:");
JTextField usernameField = new JTextField();//创建用户名输入框

JLabel passwordLabel = new JLabel(" 密码:");
JPasswordField passwordField = new JPasswordField();//创建密码输入框,用JPasswordField创建,隐藏显示输入

JLabel black = new JLabel(" ");//纯为了美观,占地方

JLabel captchaLabel = new JLabel(" 验证码:");
JTextField captchaField = new JTextField();
JLabel captchaImageLabel = new JLabel();//创建一个图片标签

JButton loginButton = new JButton("登录");
JButton rigisterButton = new JButton("注册");

panel.add(usernameLabel);
panel.add(usernameField);
panel.add(passwordLabel);
panel.add(passwordField);
panel.add(captchaLabel);
panel.add(captchaField);
panel.add(captchaImageLabel);
panel.add(black);//纯为了美观,占个地方
panel.add(loginButton);
panel.add(rigisterButton);

String captcha = generateCaptcha();//提取验证码
ImageIcon captchaImage = generateCaptchaImage(captcha);//将验证码绘制在图片上
captchaImageLabel.setIcon(captchaImage);//将图片绘制到图片标签中

loginButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String username = usernameField.getText();
//String password = new String(passwordField.getPassword());
String password = passwordField.getText();
String captcha = captchaField.getText();

//String generatedCaptcha = generateCaptcha();

if (username.equals("admin") && password.equals("123456") && captcha.equals(captcha)) {
JOptionPane.showMessageDialog(null, "登录成功!");
} else {
JOptionPane.showMessageDialog(null, "登录失败,请重新登录!");
}
}
});

frame.add(panel);
frame.setVisible(true);

}

private static String generateCaptcha() {
Random random = new Random();
StringBuilder captcha = new StringBuilder();

for (int i = 0; i < 6; i++) {
int index = random.nextInt(CAPTCHA_CHARACTERS.length);
captcha.append(CAPTCHA_CHARACTERS[index]);
}

return captcha.toString();
}

private static ImageIcon generateCaptchaImage(String captcha) {
int width = 100;
int height = 30;

BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = image.createGraphics();

g2d.setColor(Color.WHITE);
g2d.fillRect(0, 0, width, height);

g2d.setColor(Color.BLACK);
g2d.setFont(new Font("Arial", Font.BOLD, 20));
g2d.drawString(captcha, 10, 20);

g2d.dispose();

return new ImageIcon(image);
}
}


posted @   a_true  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示