如何在处理jFrame后记住用户数据



我正在创建基本的登录GUI,它允许您首先创建帐户。创建后,您可以使用创建的用户名和密码以及登录。我还有一个logOut按钮,可以返回到登录屏幕。但是,当我想重新登录时,我的凭据、用户名和密码不会保存,我必须重新注册。(这毫无意义(。处理登录框后,我如何才能记住用户名和密码。

登录代码:

private void btnLoginActionPerformed(java.awt.event.ActionEvent evt) {                                         
String uName =txtfUserName.getText();
String pass = passfPassword.getText();

String signName = txtfSetUpUName.getText();
String signPass = txtfSetUpPass.getText();

if(uName.equals(signName) && pass.equals(signPass)){
lblOutputMsg.setText("Access Granted");
OptionsMenuFrame secondFrame = new OptionsMenuFrame();
secondFrame.show();
dispose();



}else if(!uName.equals(signName) && !pass.equals(signPass)){
lblOutputMsg.setText("Invalid Password/Username");

} 
}    

有没有办法存储用户输入的数据并将其返回?

编辑:

登录代码:

private void btnLoginActionPerformed(java.awt.event.ActionEvent evt) {                                         
String uName = txtfUserName.getText();
String pass = passfPassword.getText();

String signName = txtfSetUpUName.getText();
String signPass = txtfSetUpPass.getText();

if(uName.equals(signName) && pass.equals(signPass)){
lblOutputMsg.setText("Access Granted");
OptionsMenuFrame secondFrame = new OptionsMenuFrame();
secondFrame.show();
//dispose(); using setVisible instead of DISPOSE
MainFrame firstFrame = new MainFrame();
firstFrame.setVisible(false);


}else if(!uName.equals(signName) && !pass.equals(signPass)){
lblOutputMsg.setText("Invalid Password/Username");

} 
}    

注销代码:

private void btnLogOutActionPerformed(java.awt.event.ActionEvent evt) {                                          
dispose();
MainFrame firstFrame = new MainFrame();
firstFrame.setVisible(true);

}                                         


登录按钮和注销按钮后面的代码没有相互链接,并且在两个独立的jFrames上。是否仍然可以在不打开全新登录屏幕的情况下返回到原始登录屏幕?

为了永久存储用户凭据,您应该使用数据库。MySQL通常是一个良好的开端。在用户创建帐户的文件中,让一个动作监听器连接到";创建帐户"按钮:

create.addActionListener(new ActionListener()    {
@SuppressWarnings("deprecation")
public void actionPerformed(ActionEvent e) {
// get entered userName
// get entered password
// information successfully added to user database
if(DatabaseManager.insertInUserDatabase(userName, password))
{
// navigate to logged screen
}
}           
});

DatabaseManager类中向数据库中插入用户凭据的函数应该如下所示:

public static boolean insertInUserDatabase(String username, String password)
{
boolean added = false;
int i = 0;
try {
//defining database driver to use
Class.forName("com.mysql.jdbc.Driver");

Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3308/UserDatabase", "root", "");

PreparedStatement oPrStmt = con
.prepareStatement("insert into  User (username,password)  
values(?,?)");
                  
oPrStmt.setString(1, username);// parameter index start from 1
oPrStmt.setString(2, password);
i = oPrStmt.executeUpdate(); // executing the query and getting the 
resultset from databse
if(i == 1)
added = true;

} catch (Exception e) {
System.out.println(e);
}
return added;
}

然后,下次启动应用程序或注销时,您可以使用之前创建的凭据登录,而无需再次注册:

logIn.addActionListener(new ActionListener()  {
public void actionPerformed(ActionEvent e)
{
// get entered username
// get entered password
// if log in validation is successful
if(DatabaseManager.validateLogIn(username, password))
{
// navigate to logged screen
}
else   // log in validation failed
{
// display error message
}       
}
});

DatabaseManager类中的ValidateLogIn方法应该如下所示:

public static boolean validateLogIn(String name, String pass) {
boolean validLogin = false;
try {
//defining database driver to use
Class.forName("com.mysql.jdbc.Driver");

Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3308/UserDatabase", "root", "");

PreparedStatement oPrStmt = con
.prepareStatement("select * from User where username=? and  
password=?");                                                                                          
oPrStmt.setString(1, name);// parameter index start from 1
oPrStmt.setString(2, pass);
ResultSet rs = oPrStmt.executeQuery();

if (rs.next()) { //checking if the resultset has any value?   
validLogin = true;
}

} catch (Exception e) {
System.out.println(e);
}
return validLogin;
}

希望这能有所帮助!请随意提问。

相关内容

最新更新