2013-03-22 25 views
0

我有一個程序,有一個用戶登錄功能,提示創建一個用戶名和密碼,稍後將其存儲到兩個不同的ArrayList中。我添加了一個按鈕,在創建帳戶後直接進入登錄,並且登錄工作正常。但是,如果關閉GUI並嘗試直接使用以前的登錄信息登錄,則無法識別用戶名/密碼。我的ArrayLists是否重置,或者在我的代碼中有錯誤?如何防止我的ArrayList在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

OptionGUI newContentPane= new OptionGUI();創建一個新的OptionGUI實例。

而在你OptionGUI類,你給一小塊這樣的代碼: -

ArrayList<String> passworddatabase= new ArrayList(); 
ArrayList<String> usernamedatabase= new ArrayList(); 

因此,每次您關閉並重新打開,它會創建一個新的實例OptionGUI,這將有你的ArrayList的初始化爲new ArrayList()(空數組列表)。

+0

非常感謝!你知道我怎麼仍然可以運行GUI,而不必每次都創建一個新的實例? – nichi 2013-03-22 05:49:14