我想創建一個登錄系統,使用我創建的用戶類並將多個用戶存儲在ArrayList中。然後,爲了確定用戶輸入到各個字段的內容與特定「用戶」的內容相同,底部會有一個循環來比較兩者。底部的方法返回true或false。如果我沒有以最清楚的方式解釋,我很抱歉,我很抱歉。使用ArrayList登錄系統
我的問題是我的loginAuthorization()方法只返回true當且僅當輸入ArrayList中的第一個元素並且輸入正確。它會忽略添加到ArrayList的所有其他用戶。這個問題顯然有一個「好的」答案,或者我假設,我不明白爲什麼會發生這種情況。如果有人能告訴我我做錯了什麼,那將不勝感激。 :)
我的登錄窗口類:
/**
* @author OperatorX© 2013
*/
package dossierIB;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import net.miginfocom.swing.MigLayout;
import javax.swing.JLabel;
import java.awt.Component;
import javax.swing.Box;
import java.awt.Dimension;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import javax.swing.JButton;
import javax.swing.UIManager;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.Arrays;
public class LoginWindow extends JFrame
{
private JPanel contentPane;
private JFrame errorFrame;
private JTextField usernameField;
private JPasswordField passwordField;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
LoginWindow frame = new LoginWindow();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public LoginWindow() {
setResizable(false);
setTitle("Employee Authorization");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new MigLayout("", "[][][][grow][]", "[][][][][][][]"));
JPanel bgImagePanel = new JPanel();
ImagePanel backgroundPanel = new ImagePanel(new ImageIcon("C:/Users/OpX/Documents/workspace/Dossier (WBP)/images/testtoptrans.png").getImage());
bgImagePanel.add(backgroundPanel);
contentPane.add(bgImagePanel, "cell 0 0 5 1");
Component rigidArea_4 = Box.createRigidArea(new Dimension(20, 20));
contentPane.add(rigidArea_4, "cell 4 1 1 6");
JLabel lblUsername = new JLabel("Username");
contentPane.add(lblUsername, "cell 1 2");
Component rigidArea_1 = Box.createRigidArea(new Dimension(20, 20));
contentPane.add(rigidArea_1, "cell 0 1 1 6");
Component rigidArea_3 = Box.createRigidArea(new Dimension(20, 20));
contentPane.add(rigidArea_3, "cell 2 2 1 3");
usernameField = new JTextField();
contentPane.add(usernameField, "cell 3 2,growx");
usernameField.setColumns(10);
Component rigidArea_2 = Box.createRigidArea(new Dimension(20, 20));
contentPane.add(rigidArea_2, "cell 1 3");
JLabel lblPassword = new JLabel("Password");
contentPane.add(lblPassword, "cell 1 4");
passwordField = new JPasswordField();
contentPane.add(passwordField, "cell 3 4,growx");
Component rigidArea_5 = Box.createRigidArea(new Dimension(20, 20));
contentPane.add(rigidArea_5, "cell 1 5 3 1");
JButton btnLogin = new JButton("Login");
btnLogin.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(loginAuthorization() == true)
{
ManageWindow manifest = new ManageWindow();
manifest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
manifest.setSize(697,500);
manifest.setLocationRelativeTo(null);
manifest.setVisible(true);
setVisible(false);
dispose();
}
else
return;
}
});
contentPane.add(btnLogin, "flowx,cell 3 6,alignx right");
JButton btnCreateAccount = new JButton("Create Account");
btnCreateAccount.setEnabled(false);
btnCreateAccount.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
}
});
contentPane.add(btnCreateAccount, "cell 3 6");
}
public Boolean loginAuthorization()
{
errorFrame = new JFrame();
String username = usernameField.getText();
String password = new String(passwordField.getPassword());
ArrayList<User> users = new ArrayList<User>();
User manager = new User("manager", "gocompany");
User shiftManager = new User("shiftmanager", "goshifts");
User stockBoy = new User("stockboy", "istockshelves");
User cashier = new User("cashier", "trustedwithmoney");
users.add(manager);
users.add(shiftManager);
users.add(stockBoy);
users.add(cashier);
for(int i = 0; i < users.size(); i++)
{
if(users.get(i).getUsername().compareTo(username) == 0 && users.get(i).getPassword().compareTo(password) == 0)
{
return true;
}
else
{
passwordField.setText("");
Toolkit.getDefaultToolkit().beep();
JOptionPane.showMessageDialog(errorFrame,
"Could not authorize employee with given username and password.\n\n" +
"Please reenter or contact your system administrator.\n\n",
"Employee Authorization Failed",
JOptionPane.ERROR_MESSAGE);
return false;
}
}
return false;
}
}
我的用戶等級:
/**
* @author OperatorX© 2013
*/
package dossierIB;
public class User
{
private String user;
private String pass;
public User(String u, String p)
{
user = u;
pass = p;
}
public String getUsername()
{
return user;
}
public String getPassword()
{
return pass;
}
public void setUsername(String username)
{
this.user = username;
}
public void setPassword(String password)
{
this.pass = password;
}
}
這就是你要去那裏的構造函數的一個例子。除此之外,爲什麼不縮小給你帶來麻煩的代碼的特定部分呢?如果你大大減少了我們將要瀏覽的代碼量,那麼只需要閱讀它就有很多缺陷,並且你可以幫助你自己和那些想回答問題的人。想想[SSCCE](http://sscce.org)。 – Makoto 2013-03-04 06:01:29
如果在第一次迭代期間比較是錯誤的,那麼else部分正在執行。循環無法進行到下一次迭代。 – Rakesh 2013-03-04 06:05:07
@ TierOneOps-我認爲最好使用Hashmap來存儲用戶名和密碼。示例代碼如下。請檢查我的回答 – 2013-03-04 06:09:15