我在我的第一個計算機編程課,我的任務是創建一個程序,允許用戶預訂機票。這是我第一次使用Java GUI,並且迄今爲止都取得了成功,但我無法讓程序識別輸入的密碼。我在下面粘貼了我的代碼。有人能告訴我如何解決這個問題嗎?謝謝!這是我的課:使用Arraylists在Java GUI中存儲密碼
public class OptionGUI extends JPanel implements ActionListener
{
ArrayList<String>passworddatabase= new ArrayList();
ArrayList<String> usernamedatabase= new ArrayList();
JButton newaccount = new JButton("Create a new account");
JButton login= new JButton("Login");
public int response;
public OptionGUI()
{
newaccount.setVerticalTextPosition (AbstractButton.CENTER);
newaccount.setHorizontalTextPosition(AbstractButton.LEADING);
newaccount.setActionCommand("create");
login.setVerticalTextPosition(AbstractButton.CENTER);
login.setHorizontalTextPosition(AbstractButton.TRAILING);
login.setActionCommand("login");
login.setEnabled(true);
newaccount.addActionListener(this);
login.addActionListener(this);
add(newaccount);
add(login);
}
public void actionPerformed(ActionEvent e)
{
{
if ("create".equals(e.getActionCommand()))
{
newaccount.setEnabled(true);
login.setEnabled(false);
JPanel logininfo= new JPanel();
JLabel usernameLbl= new JLabel("Choose a username:");
JLabel passwordLbl= new JLabel("Choose a password:");
JTextField username= new JTextField();
JPasswordField password= new JPasswordField();
logininfo.add(usernameLbl);
logininfo.add(username);
logininfo.add(passwordLbl);
logininfo.add(password);
logininfo.setVisible(true);
int input2 = JOptionPane.showConfirmDialog(frame,logininfo, "Create your account:"
,JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
char[] enteredPassword= password.getPassword();
char[] enteredPassword2= passwordconfirm.getPassword();
String newusername= username.getText();
String newpassword= String.valueOf(enteredPassword);
String newpassword2= String.valueOf(enteredPassword2);
String[] options = { "Login", "Cancel" };
response = JOptionPane.showOptionDialog(null, "Your account has been successfully created! Please login to continue.", "Confirmation",JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null, options,options[0]);
}
passworddatabase.add(newpassword);
usernamedatabase.add(newusername);
}
if ("loginbutton".equals(e.getActionCommand())|| response==0)
{
login.setEnabled(true);
newaccount.setEnabled(false);
JPanel panel= new JPanel();
panel.setLayout(new GridLayout(2,2));
JLabel usernameLbl = new JLabel("Username:");
JLabel passwordLbl = new JLabel("Password:");
JTextField username = new JTextField();
JPasswordField passwordFld = new JPasswordField();
panel.add(usernameLbl);
panel.add(username);
panel.add(passwordLbl);
panel.add(passwordFld);
panel.setVisible(true);
int input = JOptionPane.showConfirmDialog(frame, panel, "Enter your password:"
,JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
String inputPassword= String.valueOf(passwordFld);
String inputUsername= username.getText();
for(int i=0; i < passworddatabase.size(); i++)
{
if (passworddatabase.get(i).contains(inputPassword))
{
JOptionPane.showMessageDialog(null, "Welcome to AIR Ticket Reservation!");
}
else
{ JOptionPane.showMessageDialog(null, "The username or password you entered does not exist.", "Error",
JOptionPane.ERROR_MESSAGE);
}
}
}
}
}
}
而且我的司機:
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import javax.swing.JPasswordField;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JDialog;
import java.awt.GridLayout;
import java.util.Arrays;
import java.awt.EventQueue;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.AbstractButton;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
public class Driver
{
public static void main(String[] args)
{
JFrame option= new JFrame ("Ticket Reservation");
option.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
option.setSize(500,300);
option.setLocationRelativeTo(null);
OptionGUI newContentPane= new OptionGUI();
option.setContentPane(newContentPane);
option.setVisible(true);
}
}
這是相當漫長的,但太多的感謝!
正如你所說,你的代碼有點冗長,並不是很多人願意通讀所有這些。你可以將問題隔離爲幾行代碼(約10行左右),然後編輯原始文章? – jedyobidan 2013-03-22 02:29:51
您似乎將輸入的密碼與完整的密碼數據庫進行了比較 - 因此,如果確實可以使代碼正常工作,則user1的密碼將對user2有效。那是你要的嗎? – user93353 2013-03-22 02:34:36
感謝您指出這個問題。我將如何解決這個問題?另外,有什麼辦法可以防止每次關閉程序並重新打開它時重置ArrayList? – nichi 2013-03-22 02:48:23