Трудно понять, с чего начать, но, по сути, ваши классы делятся информацией между ними.
Чтобы немного упростить задачу, вы должны использовать модальные диалоги для сбора пользовательского ввода этого типасм. Как использовать диалоги для получения более подробной информации.
По сути, это остановит выполнение вашего кода в тот момент, когда диалоговое окно станет видимым, и продолжит выполнение, когда оно закрыто.
Таким образом, вы можете прервать поток вашей программы, собрать некоторую информацию и продолжить, когда это будет сделано.
Следующий пример в основном переопределяет ваш код, используя вместо этого диалоги, один из ключевых моментов:вниз в Login
Listener
...
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Register")) {
CreateAccount createAccount = new CreateAccount(Login.this);
credentials = createAccount.getCredentials();
} else if (e.getActionCommand().equals("Login")) {
Здесь, когда нажимается кнопка Register , появляется диалоговое окно CreateAccount
, НО код выигранне продолжается до ПОСЛЕ закрытия диалогового окна, когда пользователь получает Credentials
, который затем может быть использован для входа в систему.
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
Login login = new Login();
}
});
}
public class Credentials {
private String userName, password;
public Credentials(String userName, String password) {
this.userName = userName;
this.password = password;
}
public String getUserName() {
return userName;
}
public String getPassword() {
return password;
}
@Override
public String toString() {
return "Credentials{" + "userName=" + userName + ", password=" + password + '}';
}
}
public class CreateAccount extends JDialog {
private JLabel user, pass; //label next to username and password field
private JTextField username; //enter username
private JPasswordField password; //enter password
private JButton create;
private Credentials credentials;
public CreateAccount(JDialog owner) {
super(owner, true);
setTitle("Create Account");
createView();
pack();
setLocationRelativeTo(null);
setVisible(true);
}
private void createView() {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(4, 4, 4, 4);
gbc.gridx = 0;
gbc.gridy = 0;
user = new JLabel("Username: ");
add(user, gbc);
gbc.gridy++;
pass = new JLabel("Password: ");
add(pass, gbc);
gbc.gridx = 1;
gbc.gridy = 0;
username = new JTextField(10);
add(username, gbc);
gbc.gridy++;
password = new JPasswordField(10);
add(password, gbc);
gbc.gridx = 0;
gbc.gridy++;
gbc.gridwidth = gbc.REMAINDER;
create = new JButton("Create");
add(create, gbc);
create.addActionListener(new Listener());
}
private class Listener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String usn = username.getText();
String psd = password.getText();
credentials = new Credentials(usn, psd);
dispose();
}
}
public Credentials getCredentials() {
return credentials;
}
}
public class Login extends JDialog {
private JLabel user, pass;
private JTextField username;
JPasswordField password;
private JButton login;
private Credentials credentials;
public Login() {
setModal(true);
createView();
setTitle("Login");
pack();
setLocationRelativeTo(null);
setVisible(true);
}
private void createView() {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(4, 4, 4, 4);
gbc.gridx = 0;
gbc.gridy = 0;
user = new JLabel("Username: ");
add(user, gbc);
gbc.gridy++;
pass = new JLabel("Password: ");
add(pass, gbc);
gbc.gridx = 1;
gbc.gridy = 0;
username = new JTextField(10);
add(username, gbc);
gbc.gridy++;
password = new JPasswordField(10);
add(password, gbc);
gbc.gridx = 0;
gbc.gridy++;
login = new JButton("Login");
add(login, gbc);
login.addActionListener((new Listener()));
gbc.gridx++;
JButton register = new JButton("Register");
add(register, gbc);
register.addActionListener((new Listener()));
}
private class Listener implements ActionListener {
// CreateAccount grab = new CreateAccount();
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Register")) {
CreateAccount createAccount = new CreateAccount(Login.this);
credentials = createAccount.getCredentials();
} else if (e.getActionCommand().equals("Login")) {
String usn = username.getText();
String psd = password.getText();
if (usn.equals("Admin") && psd.equals("Password")) {
System.out.println("Admin");
dispose();
} else if (credentials != null && credentials.getUserName().equals(usn) && credentials.getPassword().equals(psd)) {
System.out.println("user");
dispose();
} else {
JOptionPane.showMessageDialog(Login.this, "Invalid login info, try again");
}
}
}
}
}
}
Лучшим долгосрочным решением было бысохраняйте учетные данные в какой-либо базе данных или поиске, который можно получить между запусками.
И, наконец, ... не используйте null
макеты!
Выше не измененный код работает на моем ПК, nuff сказал