- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
程序将初始化一个密码。然后,如果用户想要更改密码,他们将单击更改密码按钮。然后,程序将打开一个新窗口,用户必须输入当前密码、新密码和确认密码,然后如果您再次登录,密码将更改。我的程序的问题是它不更改其密码并且始终是初始化的密码。我该如何解决?这是我的代码:
//FinalLoginForm class
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.event.ActionListener;
public class FinalLoginForm extends JFrame implements ActionListener{
JLabel unLabel;
JLabel pwLabel;
JTextField unTextField;
JPasswordField pwPasswordField;
final JButton okButton = new JButton("OK");
final JButton newPwButton = new JButton("Change Password");
static FinalLoginForm myLogin = new FinalLoginForm();
static FinalChangePassword change = new FinalChangePassword();
String password = "Mariel97!";
public FinalLoginForm(){
super("Login Window");
setLayout(null);
unLabel = new JLabel("Username: ");
pwLabel = new JLabel("Password: ");
unTextField = new JTextField("");
pwPasswordField = new JPasswordField("");
okButton.setName("OK");
newPwButton.setName("Change Password");
unLabel.setBounds(40,60,100,30); unTextField.setBounds(120,60,100,30);
pwLabel.setBounds(40,90,100,30); pwPasswordField.setBounds(120,90,100,30);
okButton.setBounds(20,120,100,30); newPwButton.setBounds(120,120,150,30);
add(unLabel);
add(pwLabel);
add(unTextField);
add(pwPasswordField);
add(okButton);
add(newPwButton);
okButton.addActionListener(this);
newPwButton.addActionListener(this);
}
public void actionPerformed(ActionEvent e){
if(okButton.getName().equals(((Component)e.getSource()).getName())){
if(unTextField.getText().equals("mvbasbas")&& (new String(pwPasswordField.getPassword())).equals(password)){
JOptionPane.showMessageDialog(this, "Welcome "+unTextField.getText()+"!", "Welcome!", JOptionPane.INFORMATION_MESSAGE);
}
else
JOptionPane.showMessageDialog(this, "Invalid username or password!", "Error!", JOptionPane.ERROR_MESSAGE);
}
else if(newPwButton.getName().equals(((Component)e.getSource()).getName())){
FinalChangePassword changes = new FinalChangePassword();
changes.setVisible(true);
changes.setSize(300, 300);
changes.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
changes.setResizable(false);
myLogin.setVisible(false);JOptionPane.showMessageDialog(this, "Welcome "+msg+"!", "Login Form", JOptionPane.WARNING_MESSAGE);
}
}
public static void main(String args[]){
myLogin.setVisible(true);
myLogin.setResizable(false);
myLogin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myLogin.setSize(300,300);
}
}
空白
//FinalChangePassword
import java.util.regex.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.event.ActionListener;
public class FinalChangePassword extends JFrame implements ActionListener{
JLabel currentPwLabel;
JLabel newPwLabel;
JLabel confirmPwLabel;
JPasswordField currentPasswordField;
JPasswordField newPasswordField;
JPasswordField confirmPasswordField;
JButton okButton;
JButton cancelButton;
static FinalLoginForm myLogin = new FinalLoginForm();
static FinalChangePassword change = new FinalChangePassword();
String currentPassword;
String newPassword;
String confirmPassword;
public FinalChangePassword(){
super("Change Password");
setLayout(null);
currentPwLabel = new JLabel("Current Password: ");
newPwLabel = new JLabel("New Password: ");
confirmPwLabel = new JLabel("Confirm Password: ");
currentPasswordField = new JPasswordField("");
newPasswordField = new JPasswordField("");
confirmPasswordField = new JPasswordField("");
okButton = new JButton("OK");
cancelButton = new JButton("Cancel");
currentPwLabel.setBounds(30,60,200,35); currentPasswordField.setBounds(145,60,100,30);
newPwLabel.setBounds(30,90,100,35); newPasswordField.setBounds(145,90,100,30);
confirmPwLabel.setBounds(30,120,200,35); confirmPasswordField.setBounds(145,120,100,30);
okButton.setBounds(45,150,100,30); cancelButton.setBounds(145,150,100,30);
add(currentPwLabel);
add(newPwLabel);
add(confirmPwLabel);
add(currentPasswordField);
add(newPasswordField);
add(confirmPasswordField);
add(okButton);
add(cancelButton);
okButton.addActionListener(this);
cancelButton.addActionListener(this);
}
public static void main(String args[])throws NullPointerException{
change.setVisible(true);
change.setSize(300, 300);
change.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
change.setResizable(false);
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==okButton){
int response = JOptionPane.showConfirmDialog(this, "Do you want to change your password?", "Changing",JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
if(response == JOptionPane.YES_OPTION){
char[] curPw = currentPasswordField.getPassword();
currentPassword = new String(curPw);
char[] newPw = newPasswordField.getPassword();
newPassword = new String(newPw);
char[] conPw = confirmPasswordField.getPassword();
confirmPassword = new String(conPw);
if(myLogin.password.equals(currentPassword)){
if(newPassword.length()>7){
if(newPassword.equals(myLogin.password))
JOptionPane.showMessageDialog(this, "Password already exists!", "Error!", JOptionPane.ERROR_MESSAGE);
else{
String regex = "^(?=.*?\\p{Lu})(?=.*?[\\p{L}&&[^\\p{Lu}]])(?=.*?\\d)" + "(?=.*?[`~!@#$%^&*()\\-_=+\\\\\\|\\[{\\]};:'\",<.>/?]).*$";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(newPassword);
if(m.matches()){
if(newPassword.equals(confirmPassword)){
myLogin.password = newPassword;
FinalLoginForm myLogins = new FinalLoginForm();
myLogins.setVisible(true);
myLogins.setResizable(false);
myLogins.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myLogins.setSize(300,300);
change.setVisible(false);
}
else{
JOptionPane.showMessageDialog(this, "Password does not match!", "Error!", JOptionPane.ERROR_MESSAGE);
}
}
else{
JOptionPane.showMessageDialog(this, "Must have Capital Letter, Small Letter, Number and Special Character!", "Error!", JOptionPane.ERROR_MESSAGE);
}
}
}
else
JOptionPane.showMessageDialog(this, "Must have at least 8 characters!", "Error!", JOptionPane.ERROR_MESSAGE);
}
else
JOptionPane.showMessageDialog(this, "Wrong current password!", "Error!", JOptionPane.ERROR_MESSAGE);
}
}
else
{
FinalLoginForm myLogins = new FinalLoginForm();
myLogins.setVisible(true);
myLogins.setResizable(false);
myLogins.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myLogins.setSize(300,300);
change.setVisible(false);
}
}
}
最佳答案
主要问题是您在 FinalChangePassword
中创建 FinalLoginForm
的新实例,该实例与原始登录表单或新密码没有上下文或关系。
基本答案是使用模式对话框向用户请求信息,然后根据用户所做的选择做出决策。
重点关注代码中每个区域的职责是什么,例如,“更改密码” View 可能实际上并不负责用当前密码值验证旧密码值,这应该取决于哪个 View 实际上有当前密码(或其他 validator )。 “更改密码” View 应侧重于从用户处获取所需的信息。
例如...
public class ChangePasswordPane extends JPanel {
private JPasswordField oldPassword;
private JPasswordField newPassword;
public ChangePasswordPane() {
setLayout(new GridBagLayout());
oldPassword = new JPasswordField(20);
newPassword = new JPasswordField(20);
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(2, 2, 2, 2);
gbc.gridx = 0;
gbc.gridy = 0;
add(new JLabel("Old password: "), gbc);
gbc.gridy++;
add(new JLabel("New password: "), gbc);
gbc.gridx++;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridy = 0;
add(oldPassword, gbc);
gbc.gridy++;
add(newPassword, gbc);
}
public char[] getOldPassword() {
return oldPassword.getPassword();
}
public char[] getNewPassword() {
return newPassword.getPassword();
}
}
非常基本。它只是一个带有两个 JPasswordField
的 JPanel
,一个用于旧密码,一个用于新密码。
现在,我们需要某种方法来实际显示面板并从中获取值...
public class TestPane extends JPanel {
// This is cheat for demonstration purposes, please don't do this
// in production
private char[] password = "banana".toCharArray();
public TestPane() {
setLayout(new GridBagLayout());
JButton btn = new JButton("Change password");
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ChangePasswordPane pane = new ChangePasswordPane();
switch (JOptionPane.showConfirmDialog(TestPane.this, pane, "Change Password", JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION)) {
case JOptionPane.OK_OPTION:
char[] oldPassword = pane.getOldPassword();
if (Arrays.equals(password, oldPassword)) {
password = pane.getNewPassword();
JOptionPane.showMessageDialog(TestPane.this, "Password was changed");
} else {
JOptionPane.showMessageDialog(TestPane.this, "Password mismatch, your old password does not match your current password");
}
break;
}
}
});
add(btn);
}
}
现在,这只是使用 JOptionPane
来显示 ChangePasswordPane
,但如果您愿意,您也可以创建自己的 JDialog
。这会提示用户输入旧密码和新密码,当用户按[确定]时,将验证它们
关于java - 使用 JPasswordField 更改密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33163252/
所以我必须编写一个程序,提示用户输入密码,该密码必须满足三个要求:长度至少为 8 个字符,只能包含字母和数字,并且至少为两位数字。现在,我创建的用于检查这三个要求的方法我相信是合理的,但是我的程序还必
我的程序在初始化程序之前需要用户的用户名和密码验证,所以我创建了一个按钮登录,我将 ActionListener 关联到该按钮,如下所示 login.addActionListener(new
您好,我在这里尝试做的是接收用户输入的密码,然后将其与 if 语句中的正确密码进行比较。 public void actionPerformed(ActionEvent event) { St
我有创建一个 Jframe 的代码,我在其中添加了一个带有图片的 JLabel 和一个 JpasswordField。我希望 JpasswordField 位于图像之上,但仅取决于我在哪里执行 f.a
我关注了this Oracles tutorial关于 JPasswordField,我创建了一个简单的演示应用程序: import java.awt.event.ActionEvent; impor
Java 的 JPasswordField 正在对用户在密码字段中输入的输入进行编码,我不想要它。我正在根据纯数值的数据库值检查密码。 我正在输入密码的数值作为 12345 它返回 [C@1e9b48
我知道以前有人问过这个问题,但他们没有使用 .equals()。所以我要再问一次,为什么我有两个字符串,但是当我将它们与 .equals() 进行比较时,我得到了 false。这两个字符串是 1234
当输入类似密码时 yeast bulk seize is shows pain 每个人都可以听到敲击空格键的声音,因此在密码字段中显示空格似乎也是合乎逻辑的。所以我想要一些能够展示的东西 *****
抱歉再次提起这个话题,我已经仔细阅读了另一个类似的问题 Why does JPasswordField.getPassword() create a String with the password
--编辑-- 我有一个 JTextField,我希望每次有人更改(键入或删除)JTextField 中的字符时调用一个方法(现在只是打印语句)。其背后的目的是让该方法立即检查键入的内容是否满足某些条件
大家好,我需要一个密码,我想将其写入 JPasswordField(JPasswordFieldAnon) 并将提交操作附加到两个 JButton(AnonButton 和 AnonButton1)。
我是 JApplet 的新手。我不知道如何从方法 actionPerformed 内的内部类访问 JPasswordField 对象。我想将 PasswordField 添加到我的 JFrame Bi
我有一个代码,用于检查用户输入是否仅为字母数字,并根据标准检查输入的密码的强度。如果出现以下情况,则会出现带有注释的标签: -字段为空 -使用了无效字符 并且还会显示密码是否为弱、中、强和非常强 th
程序将初始化一个密码。然后,如果用户想要更改密码,他们将单击更改密码按钮。然后,程序将打开一个新窗口,用户必须输入当前密码、新密码和确认密码,然后如果您再次登录,密码将更改。我的程序的问题是它不更改其
我需要填充JPassword字段。但是看起来没有方法 setPassword (char []) 唯一的方法是 setText 。但是我需要提供一个 String 由于 getText 已被弃用,所以
我正在编写一个带有 JPasswordField 的小程序,我想知道是否可以保护我的 JPasswordField 的内容,以防用户的 PC 被键盘记录器入侵...... 我知道 Java 无法执行内
JPasswordField 的默认密码符号是一个点。 但这将被 Java Look and Feel 替换为星号。 有没有办法在加载外观后将此符号再次替换为点? 我已经知道在加载外观代码之前初始化或
任何人都可以帮助我编写这段代码,因为我是 Java 新手。我在网上找到了这段代码,我想了解它的作用? pass = new JPasswordField(10); pass.addKeyLis
在我的软件中,我提供了用于FTP登录的工具。我使用 JPasswordField 作为登录面板的密码部分。但是,建议将 JPasswordField 数组的每个字符设置为 0 以保证其安全。但我不确定
这个问题已经有答案了: Displaying the password in a JPasswordField rather than setting 0 as an echo char (5 个回答
我是一名优秀的程序员,十分优秀!