【问题标题】:Cant save my JtextFields in arraylist无法将我的 JtextFields 保存在 arraylist 中
【发布时间】:2013-12-11 18:48:23
【问题描述】:

我尝试用 Java 实现一个注册表单。我的主框架由 3 个按钮组成:登录、注册、下订单,我有 setEnabled(false)。如果用户想要登录(意味着他已经拥有一个帐户)并且他提供了正确的 id 和 psw,我希望隐藏登录框架并显示我的主框架,并且这次启用了下订单按钮。这是我的第一个问题。我的第二个问题是在注册时我无法将用户的输入保存在 ArrayList<User> 中。

MainFrame.java:

public class MainFrame extends JFrame {

private JButton loginButton;
private JButton signUpButton;
 JButton placeOrderButton;

private boolean q;

private UserManager userManager;

public MainFrame(){
    super("Main Panel");
    userManager = new UserManager();
    loginButton = new JButton("Login");
    loginButton.addActionListener(new LoginButtonListener());
    placeOrderButton = new JButton("Place Order");
    placeOrderButton.addActionListener(new PlaceOrderButtonListener());
    placeOrderButton.setEnabled(false);



    signUpButton = new JButton("Sign Up");
    signUpButton.addActionListener(new SignUpButtonListener());



    this.getContentPane().add(loginButton, BorderLayout.LINE_START);
    this.getContentPane().add(signUpButton, BorderLayout.CENTER);
    this.getContentPane().add(placeOrderButton, BorderLayout.LINE_END);
    this.pack();
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setVisible(true);






}

class LoginButtonListener implements ActionListener{

    @Override

    public void actionPerformed(ActionEvent arg0) {
         new LoginFrame(userManager);

    }
}

class SignUpButtonListener implements ActionListener{

    @Override
    public void actionPerformed(ActionEvent arg0) {
        new SignUpFrame(userManager);

    }
}


class PlaceOrderButtonListener implements ActionListener {

    public void actionPerformed(ActionEvent argO){



    }


}

用户.java:

public class User {

private String fullName;
private String email;
private String userID;
private String password;

public User(String fullName, String email, String userID, String password) {
    this.fullName = fullName;
    this.email = email;
    this.userID = userID;
    this.password = password;
}

public String getFullName() {
    return fullName;
}
public void setFullName(String fullName) {
    this.fullName = fullName;
}
public String getEmail() {
    return email;
}
public void setEmail(String email) {
    this.email = email;
}
public String getUserID() {
    return userID;
}
public void setUserID(String userID) {
    this.userID = userID;
}
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}

LoginFrame.java:

public class LoginFrame extends JFrame{

    private JButton loginButton;
    private JTextField usernameField;
    private JPasswordField password;

    private UserManager userManager;

    public LoginFrame(UserManager userManager){
        super("Enter your credentials to login");
        this.userManager = userManager;
        loginButton = new JButton("Login");
        loginButton.addActionListener(new LoginButtonListener());

        usernameField = new JTextField(15);
        password = new JPasswordField(15);

        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new GridLayout(3,2));

        mainPanel.add(new JLabel("Username:"));
        mainPanel.add(usernameField);
        mainPanel.add(new JLabel("Password:"));
        mainPanel.add(password);
        mainPanel.add(loginButton);

        this.setContentPane(mainPanel);
        this.pack();
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }           
        class LoginButtonListener implements ActionListener{


public void actionPerformed(ActionEvent arg0) {
    String givenID = usernameField.getText();



    if(userManager.isUserInList(givenID)){
        String givenPass = password.getText();
        User theUser = userManager.getUserWithID(givenID);
        if(givenPass.equals(theUser.getPassword())){
            JOptionPane.showMessageDialog(null, "Access granted!");

        dispose();

        new MainFrame();
        }


        else{
            JOptionPane.showMessageDialog(null, 
                            "Wrong Password", 
                            "Error!",
                            JOptionPane.ERROR_MESSAGE);
        }
    }
    else{
        JOptionPane.showMessageDialog(null, 
                "Wrong username", 
                "Error!",
                JOptionPane.ERROR_MESSAGE);
    }
}

}

SignUpFrame.java:

public class SignUpFrame extends JFrame{

private JButton signupButton;
private JTextField name;
private JTextField email;
private JTextField username;
private JPasswordField pass;

private UserManager userManager;

public SignUpFrame (UserManager userManager){
super("Please fill in your Data");

userManager = new UserManager();

signupButton = new JButton("Sign Up!");
signupButton.addActionListener(new signupButtonListener());

JTextField name = new JTextField(15);

JTextField email = new JTextField(15);

JTextField username = new JTextField(15);

JTextField pass = new JTextField(15);



JPanel mainPanel = new JPanel();

mainPanel.setLayout(new GridLayout(5,2));

mainPanel.add(new JLabel("Name:"));
mainPanel.add(name);
mainPanel.add(new JLabel("Email:"));
mainPanel.add(email);
mainPanel.add(new JLabel("Username"));
mainPanel.add(username);
mainPanel.add(new JLabel("Password:"));
mainPanel.add(pass);
mainPanel.add(signupButton);

this.setContentPane(mainPanel);
this.pack();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);


class signupButtonListener implements ActionListener{

public void actionPerformed(ActionEvent arg0) {



    User u2 = new User(name.getText(),email.getText(),username.getText(),pass.getText());



    add(u2);

}
}

导入 java.util.ArrayList;

公共类用户管理器{

private ArrayList<User> userList;

public UserManager(){
    userList = new ArrayList<User>();
    User u1 = new User("Teo Haik", "teo@uom.gr","teohaik","teopass");
    userList.add(u1);
}

public boolean isUserInList(String ID){
    for(User u: userList){
        if(u.getUserID().equals(ID)){
            return true;
        }
    }
    return false;
}

public User getUserWithID(String ID){
    for(User u: userList){
        if(u.getUserID().equals(ID)){
            return u;
        }
    }
    return null;
}

【问题讨论】:

  • 请发布您尝试过的代码。
  • 发布sscce.org 以获得快速帮助
  • 你能告诉我们一些你的代码吗?你有存储数据的问题吗?或从字段中获取数据?究竟是什么问题我无法将用户输入保存到数组列表中 .. 为什么?原因?修改您的问题,以便我们提供更好的答案。字段中的 GetText 将其放入一个字符串中,使用分隔符并将该数据放入 arraylist 应该没有问题
  • 我做了所有需要的更改
  • 附带问题:什么是 UserManeger 类?是预定义的还是你自己做的

标签: java swing arraylist


【解决方案1】:

1) 对于 placeOrder 按钮:


A) 改为静态;从 loginFrame 类访问它。

      static JButton placeOrderButton;

B) 修改 loginButtonListener 类中的 actionPerformed 方法如下:

      public void actionPerformed(ActionEvent arg0) {

        String givenID = usernameField.getText();
        if(userManager.isUserInList(givenID)){
            String givenPass = password.getText();
            User theUser = userManager.getUserWithID(givenID);
            if(givenPass.equals(theUser.getPassword())){
                JOptionPane.showMessageDialog(null, "Access granted!");
                dispose();
                MainFrame.placeOrderButton.setEnabled(true); //her we enable editing
                //  new MainFrame(); no need for that 
            }else{
            JOptionPane.showMessageDialog(null,  "Wrong Password",  "Error!", JOptionPane.ERROR_MESSAGE);
            }
        }else{
        JOptionPane.showMessageDialog(null, "Wrong username","Error!",JOptionPane.ERROR_MESSAGE);
        }
    }

2) 将用户添加到 userList(Array List):


A) 改为静态;从 SignUpFrame 类访问它。

      static ArrayList<User> userList;

B) 修改 SignUpFrame 类如下:

      public class SignUpFrame extends JFrame{


           private JButton signupButton;
           private JTextField name;
           private JTextField email;
           private JTextField username;
           private JPasswordField pass;

           //private UserManager userManager; no need for user manager 

           public SignUpFrame (){
                super("Please fill in your Data");

                //userManager = new UserManager(); no need for user manager 

                signupButton = new JButton("Sign Up!");
                signupButton.addActionListener(new signupButtonListener());


                // You were declaring them again !
                 name = new JTextField(15);

                 email = new JTextField(15);

                 username = new JTextField(15);

                 pass = new JPasswordField(15);



                JPanel mainPanel = new JPanel();

                mainPanel.setLayout(new GridLayout(5,2));

                mainPanel.add(new JLabel("Name:"));
                mainPanel.add(name);
                mainPanel.add(new JLabel("Email:"));
                mainPanel.add(email);
                mainPanel.add(new JLabel("Username"));
                mainPanel.add(username);
                mainPanel.add(new JLabel("Password:"));
                mainPanel.add(pass);
                mainPanel.add(signupButton);

                this.setContentPane(mainPanel);
                this.pack();
                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                this.setVisible(true);

         }
     class signupButtonListener implements ActionListener{
         public void actionPerformed(ActionEvent arg0) {
           try{ 
              // Organizing for better readability 
              String newName = name.getText();
              String newEmail = email.getText();
              String newUserName = username.getText();
              String newPass = pass.getText();

              User u2 = new User(newName,newEmail,newUserName,newPass);

              UserManager.userList.add(u2);


          }catch(NullPointerException e){
          System.out.println("fill all fields");
           }
               dispose(); //to close SignUpFrame
   }
}

【讨论】:

  • 很高兴有帮助:),最后一行已更新以处理注册框架。
【解决方案2】:

根据上面发布的代码,您并未将新用户添加到 UserManager。您在 signupButtonListener 中的行 add(u2); 尝试将用户添加到框架,而不是 UserManager。事实上,将用户添加到 ArrayList 的唯一代码是在 UserManager 构造函数中硬编码的代码。

您需要向 UserManager 添加一个方法,该方法将用户作为参数,如果用户不存在,则将该用户添加到 ArrayList 中(如果他们已经存在,您可能还需要一个删除给定用户的方法在 ArrayList 中也是如此)。然后,在用户注册后,调用该方法来添加用户。

【讨论】:

  • 我已经在 UserManager 上实现了这个方法: public void addUser(User p) if(!userList.contains(p)) userList.add(p);在 signupButtonListener 中我写了:userList.addUser(u1) 但它对我说 userList 无法解析...
  • 类 signupButtonListener 没有 userList 的实例 - 它也不应该。您应该使用现有的 UserManager 的 addUser() 方法来添加所有用户。您可能需要在 Wikipedia 上搜索要在 UserManager 类上使用的单例模式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-22
  • 1970-01-01
  • 2015-06-30
  • 2021-04-09
  • 2016-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多