【发布时间】:2015-10-16 05:39:15
【问题描述】:
程序会初始化一个密码。然后如果用户想更改密码,他们会点击更改密码按钮。然后,程序将打开一个新窗口,然后用户必须输入当前密码,新密码,并确认密码,然后如果您再次登录,密码将更改。 我的程序的问题是它不会更改密码并且始终是初始化密码。我该如何解决?这是我的代码:
//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);
}
}
}
【问题讨论】:
-
不要依赖
static,使用模态对话框来提出更改密码的请求,当对话框关闭时,获取值然后进行比较 -
我们的教授还没有讨论什么是模态对话框,所以我不知道如何编程。
-
哦。我实际使用过,但还是一样。
-
那是因为你的设置和你的展示之间的关系是不存在的。不要在
FinalChangePassword类中创建FinalLoginForm的新实例
标签: java swing user-interface login change-password