[英]Cant save my JtextFields in arraylist
我尝试在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){
}
}
User.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;
公共类UserManager {
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;
}
从上面发布的代码中,您没有将新用户添加到UserManager中。 您的行add(u2);
在signupButtonListener中,尝试将用户添加到框架中,而不是添加到UserManager中。 实际上,唯一将User添加到ArrayList的代码是在UserManager构造函数中进行的硬编码。
您需要在UserManager中添加一个将User作为参数的方法,如果该用户不在其中,则将该用户添加到ArrayList中(如果他们已经在ArrayList中,则还可能需要一种方法来删除给定的User以及)。 然后,在用户注册后,调用该方法以添加用户。
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
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.