gpt4 book ai didi

Java JPasswordField

转载 作者:行者123 更新时间:2023-11-30 02:51:28 26 4
gpt4 key购买 nike

所以我必须编写一个程序,提示用户输入密码,该密码必须满足三个要求:长度至少为 8 个字符,只能包含字母和数字,并且至少为两位数字。现在,我创建的用于检查这三个要求的方法我相信是合理的,但是我的程序还必须执行一些异常处理,并且能够在其中一个要求关闭时要求用户重新输入密码,并向用户显示相应的错误消息遵守每一项要求。我创建了一个字符串 errorMessage 来转发该消息,但当我尝试在 main 中调用它时,它给了我一个错误?

我的另一个问题是,必须使用 JPasswordField 将密码输入到我的程序中,但我什至都在努力设置它,因为我读到的许多其他因素,如 JPanel、按钮和操作事件都必须消失与它一起。我尝试使用 JPasswordField 并注意到接收密码的行将其作为数组接收,当我的 checkPassword 方法需要字符串时,我如何将该密码作为字符串接收?

这是我到目前为止的程序:

   import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;

import javafx.event.ActionEvent;

public class Ed10Chp6Ex6Point18CheckPasswordProgram {

public static void main(String[] args) {

final JFrame frame = new JFrame("Check Password Program");
JLabel jlbPassword = new JLabel("Please enter the password: ");
JPasswordField jpwName = new JPasswordField(15);
jpwName.setEchoChar('*');
jpwName.addActionListener(new ActionListener()) {

public void actionPerformed(ActionEvent e) {
JPasswordField input = (JPasswordField) e.getSource();
char[] password = input.getPassword();

if(checkPassword(password)){
JOptionPane.showMessageDialog(frame, "Congradulations, your password follows all the requirements");
}
else{
JOptionPane.showMessageDialog(frame, errorMessage);
}
}
}
}

public static boolean checkPassword(String x) {

String errorMessage = "";

//must have at least eight characters
if (x.length() < 8){
errorMessage = "The password you entered is invalid, password must be at least 8 characters";
return false;
}

//consists of only letters and digits
for (int i = 0; i < x.length(); i++) {
if (!Character.isLetter(x.charAt(i)) && !Character.isDigit(x.charAt(i))) {
errorMessage = "The password you entered is invalid, password must contain only letters and digits";
return false;
}
}

//must contain at least two digits
int count = 0;
for (int i = 0; i < x.length(); i++) {
if (Character.isDigit(x.charAt(i))){
count++;
}
}

if (count >= 2){
return true;
}
else {
errorMessage = "The password you entered is invalid, password must contain at least two digits";
return false;
}
}
}

如果我的一些问题看起来很简单,我提前道歉,任何帮助将不胜感激,谢谢!

最佳答案

有两件事:

(1) 确保导入正确的类,不要依赖 IDE 来进行正确的导入。您正在从 JavaFX 导入 ActionEvent 类,但您使用的框架是 Swing。

改变

import javafx.event.ActionEvent;

import java.awt.event.ActionEvent;

我不太熟悉 JavaFX 和 Swing 之间的配合如何,但使用正确的类通常有助于避免令人头疼的问题和编译/运行时错误。

(2) java.lang.String 类中的静态方法提供了一种将 char 数组转换为字符串的便捷方法。在您的 actionPerformed 方法中,添加以下内容:

String passStr = String.valueOf(password);

例如

@Override
public void actionPerformed(ActionEvent e) {
// Get the source of the event, we know it is a JPasswordField so we cast it.
JPasswordField input = (JPasswordField) e.getSource();
// Get the char array from the input the user typed stored in the input object.
char[] password = input.getPassword();
// Convert char[] to String
String passwordStr = String.valueOf(password);
if(checkPassword(passwordStr)){
JOptionPane.showMessageDialog(frame, "Congradulations, your password follows all the requirements");
} else {
JOptionPane.showMessageDialog(frame, errorMessage);
}
}

关于Java JPasswordField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38516048/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com