Я начал изучать Java недавно, поэтому решил создать простую регистрационную форму.Сравнение значения JTextField с несколькими массивами
private JTextField username;
private JPasswordField password;
private JButton check;
private JButton addToDb;
ArrayList<String> dbUser = new ArrayList<String>();
ArrayList<String> dbPassword = new ArrayList<String>();
public trial(){
super("Title");
setLayout(new FlowLayout());
username = new JTextField("",10);
password = new JPasswordField("",10);
check = new JButton("Login");
addToDb = new JButton("Sign Up");
add(username);
add(password);
add(check);
add(addToDb);
addToDb.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent event){
if(!username.getText().isEmpty()
&& !password.getText().isEmpty()){
dbUser.add(username.getText());
dbPassword.add(password.getText());
username.setText("");
password.setText("");
System.out.println(dbUser + "/" + dbPassword);
}else{
System.out.println("Please fill the fields and try again!");
}
}
}
);
check.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent event){
for(int i=0; i<dbUser.size();i++){
if(username.getText() == dbUser.get(i) && password.getText()== dbPassword.get(i)){
JOptionPane.showMessageDialog(null, "Access Granted!");
}else{
JOptionPane.showMessageDialog(null, "Access Denied!");
}
break;
}
}
}
);
}
}
Как вы можете видеть, я сделал два текстовых поля (имя пользователя и пароль), две кнопки, один, который хранит значения в двух разных ArrayLists (я попытался с HashMap, но это не сработало). И тот, который сравнивает значения в массивах со значениями в текстовых полях. Проблема в том, что когда я использую кнопку входа в систему, она всегда говорит, что доступ запрещен. Любые идеи, как это исправить?
Не сравнивайте строки с помощью '==' или '='. Используйте вместо этого метод 'equals (...)' или 'equalsIgnoreCase (...)'. Поймите, что '==' проверяет, соответствуют ли две ссылки на объекты *, которые вас не интересуют. Методы, с другой стороны, проверяют, имеют ли две строки одни и те же символы в одном порядке, и это то, что дело здесь. Поэтому вместо 'if (fu ==" bar ") {' do 'if (" bar ".equals (fu)) {' или 'if (" bar ".equalsIgnoreCase (fu)) {' –
Кроме того, ваш компилятор должен жаловаться, когда вы пытаетесь вызвать 'getText()' в поле JPassword, - слушайте эту жалобу и в интересах безопасности кода и безопасного кодирования не вызывайте этот метод. Вместо этого работайте с массивом char, который возвращается 'getPassword()'. –
@Hovercraft Full Of Eels Чтобы отметить этот вопрос как дубликат, мне кажется странным: конечно, это сводится к сравнению строк с equals() вместо ==, но автор вопроса не знал об этом факте, так как он/она изучает Java. Мне кажется, что он отстает от меня, потому что, если бы автор знал об этом факте, он бы не допустил этой ошибки. ? – morpheus05