Проверка имени пользователя и пароля не работает в Java GUI Project с использованием методов getText () и getter / setter? - PullRequest
0 голосов
/ 12 декабря 2018

Я использую серию операторов if / else, чтобы убедиться, что пользовательский ввод совпадает, используя метод .equals ().Однако, похоже, что даже если я поместил один и тот же ввод в TextField и PasswordField фрейма «Создать учетную запись», а также в TextField и PasswordField фрейма «Логин», появляется диалоговое окно с сообщением «Неверная информация для входа, попробуйте еще раз».Что я делаю не так?

Создать учетную запись Class / Frame

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class CreateAccount extends JFrame{

    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 String u, p;
    private static final int WIDTH = 500;
    private static final int HEIGHT = 300;

    public CreateAccount(){


        setTitle("Create Account");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(WIDTH, HEIGHT);
        setMinimumSize(new Dimension(WIDTH, HEIGHT));
        setLocationRelativeTo(null);
        setResizable(false);

        createView();
        setVisible(true);

    }


    private void createView(){


        JPanel panelMain = new JPanel(null);
        getContentPane().add(panelMain);

        user = new JLabel("Username: ");
        panelMain.add(user);
        user.setBounds(50, 30, 120, 25);

        username = new JTextField();
        panelMain.add(username);
        username.setBounds(140, 30, 150, 25);


        pass = new JLabel("Password: ");
        panelMain.add(pass);
        pass.setBounds(50, 100, 120, 25);

        password = new JPasswordField();
        panelMain.add(password);
        password.setBounds(140, 100, 150, 25);

        create = new JButton("Create");
        panelMain.add(create);
        create.setBounds(170, 180, 100,25);
        create.addActionListener((new Listener()));

    }

    private class Listener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            String usn = username.getText();
            String psd = password.getText();
            setUser(usn);
            setPass(psd);
            new Login();
            setVisible(false);
        }
    }

    public void setUser(String usn){
        this.u = usn;
    }

    public String getUser(){
        return u;
    }

    public void setPass(String psd){
        this.p = psd;
    }

    public String getPass(){
        return p;
    }

}

Login Class / Frame

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Login extends JFrame{

    private JLabel user, pass;
    private JTextField username;
    JPasswordField password;
    private JButton login;
    private static final int WIDTH = 500;
    private static final int HEIGHT = 300;


    public Login(){

        setTitle("Login");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(WIDTH, HEIGHT);
        setMinimumSize(new Dimension(400, 200));
        setLocationRelativeTo(null);
        setResizable(false);
        createView();
        setVisible(true);

    }

    private void createView(){

        JPanel panel = new JPanel(null);
        getContentPane().add(panel);

        user = new JLabel("Username: ");
        panel.add(user);
        user.setBounds(50, 30, 120, 25);

        username = new JTextField();
        panel.add(username);
        username.setBounds(140, 30, 150, 25);

        pass = new JLabel("Password: ");
        panel.add(pass);
        pass.setBounds(50, 100, 120, 25);

        password = new JPasswordField();
        panel.add(password);
        password.setBounds(140, 100, 150, 25);

        login = new JButton("Login");
        panel.add(login);
        login.setBounds(170, 170, 100, 25);
        login.addActionListener((new Listener()));
    }

    private class Listener implements ActionListener{
        CreateAccount grab = new CreateAccount();
        @Override
        public void actionPerformed(ActionEvent e) {
            String usn = username.getText();
            String psd = password.getText();

            if(usn.equals("Admin") && psd.equals("Password")){

                new AdminDB();
            }

            else if (usn.equals(grab.getUser()) && psd.equals(grab.getPass()))
            {
                new UserDB();
            }

            else
            {
                JOptionPane.showMessageDialog(null,"Invalid login info, try again");
            }

            setVisible(false);
        }
    }


}

1 Ответ

0 голосов
/ 12 декабря 2018

Трудно понять, с чего начать, но, по сути, ваши классы делятся информацией между ними.

Чтобы немного упростить задачу, вы должны использовать модальные диалоги для сбора пользовательского ввода этого типасм. Как использовать диалоги для получения более подробной информации.

По сути, это остановит выполнение вашего кода в тот момент, когда диалоговое окно станет видимым, и продолжит выполнение, когда оно закрыто.

Таким образом, вы можете прервать поток вашей программы, собрать некоторую информацию и продолжить, когда это будет сделано.

Следующий пример в основном переопределяет ваш код, используя вместо этого диалоги, один из ключевых моментов:вниз в 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 макеты!

All the reasons why you shouldn't use null layouts

Выше не измененный код работает на моем ПК, nuff сказал

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...