如何将一个jFrame中的代码与另一个jFrame中的代码链接起来



我正在创建一个GUI,用户可以在其中创建一个帐户,当他返回到主框架时,他可以输入他的帐户信息并登录。到目前为止,我已经做到了:

//gets username and password from Login main frame
String uName =txtfUserName.getText();
String pass = txtfPassword.getText();    


//signUpName && signUpPass are textfields from the second frame that stores the user's sign up account info. 
//output I want but will not work
if(uName.equals(signUpName)) && (pass.equals(signUpPass)){
lblOutputMsg.setText("Access Granted");
}else if(!uName.equals(signUpName)) || (!pass.equals(signUpPass)){
lblOutputMsg.setText("Invalid");
}

第二帧代码

String signUpName = txtfSetUpUName.getText();
String signUpPass = txtfSetUpPass.getText(); 
dispose();
MainFrame firstFrame = new MainFrame();
firstFrame.setVisible(true);

我该如何参考第二个Jframe才能使用上面的代码?这样它就可以获取用户创建帐户所需的信息,并查看它是否与登录屏幕中输入的信息相匹配。

编辑:What If而不是创建第二个jFrame,我只是在主框架中添加一个Panel来询问用户的凭据。这样我就可以执行上面的代码了。唯一的问题是主框架不会关闭,它会直接打开顶部的第二个面板。我是否可以关闭主框架,只显示注册面板,然后以某种方式返回主机?

您需要向两个框架传递一个公共对象。创建一个新的类

class LoginInfo {
Map<String, String> credentials = new HashMap<>();
public boolean isValidCredentials(String username, String password) {
return credentials.containsKey(username)&&credentials.get(username).equals(password);
}

public void addCredentials(String username, String password) {
credentials.put(username, password);
}
}

那么你所做的就是

  1. 创建登录信息实例
  2. 将同一实例传递给两个帧
  3. 使用此实例存储和检查凭据

登录信息=新登录信息((;MainFrame firstFrame=新的MainFrame(信息(;

我认为您需要一个名为User的额外类。然后在此类上创建一个实例,并将这些值用于不同的帧。

请注意,这会删除默认构造函数,如果你想使用它,你应该重新添加它

看看我做的这个例子:

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
public class Login {
public static List<User> userList = new ArrayList<User>();
public static void main(String[] args) {
loginFrame();
}
public static void registerFrame() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
frame.add(panel);
JTextField username = new JTextField();
JTextField password = new JTextField();
Dimension dim = new Dimension(50, 20);
username.setPreferredSize(dim);
password.setPreferredSize(dim);
panel.add(username);
panel.add(password);
JButton submit = new JButton("submit");
submit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
userList.add(new User(username.getText(), password.getText()));
frame.dispose();
loginFrame();
}
});
panel.add(submit);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void loginFrame() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
frame.add(panel);
JTextField username = new JTextField();
JTextField password = new JTextField();
Dimension dim = new Dimension(50, 20);
username.setPreferredSize(dim);
password.setPreferredSize(dim);
panel.add(username);
panel.add(password);
JButton submit = new JButton("login");
submit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for(User user : userList) {
// can change to equalsIgnoreCase if you don't want the password or user name to be case sensitive
if(user.getUsername().equals(username.getText()) && user.getPassword().equals(password.getText())) {
System.out.println("Access Granted");
return;
}
} System.out.println("Access Denied");
}
});

JButton register = new JButton("register");
register.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
frame.dispose();
registerFrame();

}
});

panel.add(submit);
panel.add(register);

frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}

用户级

public class User {

private String username;

private String password;

public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}

public User(String username, String password) {
this.username = username;
this.password = password;
}
}

请记住,这不会保存用户,一旦你停止程序,用户将被丢弃。

最新更新