我正在创建基本的登录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;
}
希望这能有所帮助!请随意提问。