2013-03-22 25 views
0

我在我的第一個計算機編程課,我的任務是創建一個程序,允許用戶預訂機票。這是我第一次使用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); 
    }    
} 

這是相當漫長的,但太多的感謝!

+1

正如你所說,你的代碼有點冗長,並不是很多人願意通讀所有這些。你可以將問題隔離爲幾行代碼(約10行左右),然後編輯原始文章? – jedyobidan 2013-03-22 02:29:51

+0

您似乎將輸入的密碼與完整的密碼數據庫進行了比較 - 因此,如果確實可以使代碼正常工作,則user1的密碼將對user2有效。那是你要的嗎? – user93353 2013-03-22 02:34:36

+0

感謝您指出這個問題。我將如何解決這個問題?另外,有什麼辦法可以防止每次關閉程序並重新打開它時重置ArrayList? – nichi 2013-03-22 02:48:23

回答

0

我看到,在loginButton操作命令處理您可能有一個問題。您應該使用JPasswordField的值而不是JPasswordFieldObject本身。我很確定,你不是故意這樣寫的。請檢查是否有幫助。

 String.valueOf(passwordFld.getPassword()); 

嘗試使用inputPassword String的上述代碼行。

String inputPassword= **String.valueOf(passwordFld);** 
    String inputUsername= username.getText(); 

    for(int i=0; i < passworddatabase.size(); i++) 
    { 
    if (passworddatabase.get(i).contains(inputPassword)) 
    { 
+0

非常感謝你!我一直試圖解決這個問題很長一段時間,我無法弄清楚問題所在。 – nichi 2013-03-22 02:46:13

+0

不客氣!很高興我可以幫助...如果你不介意,你可以把這個標記爲答案:P – prashantsunkari 2013-03-22 02:58:53